-
Notifications
You must be signed in to change notification settings - Fork 2.9k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
13 changed files
with
199 additions
and
35 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,93 @@ | ||
package extractors | ||
|
||
import ( | ||
"encoding/json" | ||
"fmt" | ||
"log" | ||
"strconv" | ||
"strings" | ||
"time" | ||
|
||
"github.com/iawia002/annie/downloader" | ||
"github.com/iawia002/annie/parser" | ||
"github.com/iawia002/annie/request" | ||
"github.com/iawia002/annie/utils" | ||
) | ||
|
||
type vidl struct { | ||
M3utx string `json:"m3utx"` | ||
Vd int `json:"vd"` // quality number | ||
ScreenSize string `json:"screenSize"` | ||
} | ||
|
||
type iqiyiData struct { | ||
Vidl []vidl `json:"vidl"` | ||
} | ||
|
||
type iqiyi struct { | ||
Code string `json:"code"` | ||
Data iqiyiData `json:"data"` | ||
} | ||
|
||
func getIqiyiData(tvid, vid string) iqiyi { | ||
t := time.Now().Unix() * 1000 | ||
src := "76f90cbd92f94a2e925d83e8ccd22cb7" | ||
key := "d5fb4bd9d50c4be6948c97edd7254b0e" | ||
sc := utils.Md5(strconv.FormatInt(t, 10) + key + vid) | ||
info := request.Get(fmt.Sprintf( | ||
"http://cache.m.iqiyi.com/jp/tmts/%s/%s/?t=%d&sc=%s&src=%s", | ||
tvid, vid, t, sc, src, | ||
)) | ||
var data iqiyi | ||
json.Unmarshal([]byte(info[len("var tvInfoJs="):]), &data) | ||
return data | ||
} | ||
|
||
// Iqiyi download function | ||
func Iqiyi(url string) downloader.VideoData { | ||
html := request.Get(url) | ||
tvid := utils.MatchOneOf( | ||
html, | ||
`data-player-tvid="([^"]+)"`, | ||
`param\[\'tvid\'\]\s*=\s*"(.+?)"`, | ||
)[1] | ||
vid := utils.MatchOneOf( | ||
html, | ||
`data-player-videoid="([^"]+)"`, | ||
`param\[\'vid\'\]\s*=\s*"(.+?)"`, | ||
)[1] | ||
doc := parser.GetDoc(html) | ||
title := strings.TrimSpace(doc.Find("h1 a").Text()) + | ||
strings.TrimSpace(doc.Find("h1 span").Text()) | ||
videoDatas := getIqiyiData(tvid, vid) | ||
if videoDatas.Code != "A00000" { | ||
log.Fatal("Can't play this video") | ||
} | ||
videoData := videoDatas.Data.Vidl[0] | ||
var urls []downloader.URLData | ||
var urlData downloader.URLData | ||
var totalSize int64 | ||
var size int64 | ||
for _, ts := range utils.M3u8Urls(videoData.M3utx) { | ||
size, _ = strconv.ParseInt( | ||
utils.MatchOneOf(ts, `contentlength=(\d+)`)[1], 10, 64, | ||
) | ||
urlData = downloader.URLData{ | ||
URL: ts, | ||
Size: size, | ||
Ext: "ts", | ||
} | ||
totalSize += size | ||
urls = append(urls, urlData) | ||
} | ||
data := downloader.VideoData{ | ||
Site: "爱奇艺 iqiyi.com", | ||
Title: title, | ||
Type: "video", | ||
URLs: urls, | ||
Size: totalSize, | ||
Quality: videoData.ScreenSize, | ||
} | ||
data.Download(url) | ||
return data | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,41 @@ | ||
package extractors | ||
|
||
import ( | ||
"testing" | ||
|
||
"github.com/iawia002/annie/config" | ||
"github.com/iawia002/annie/test" | ||
) | ||
|
||
func TestIqiyi(t *testing.T) { | ||
config.InfoOnly = true | ||
tests := []struct { | ||
name string | ||
args test.Args | ||
}{ | ||
{ | ||
name: "normal test", | ||
args: test.Args{ | ||
URL: "http://www.iqiyi.com/v_19rrbhikxo.html", | ||
Title: "热血街舞团:鹿晗个人宣传片震撼发布 执着前行终现万丈荣光", | ||
Size: 11718040, | ||
Quality: "1280x720", | ||
}, | ||
}, | ||
{ | ||
name: "normal test", | ||
args: test.Args{ | ||
URL: "http://www.iqiyi.com/v_19rrbdmaj0.html", | ||
Title: "新一轮降水将至 冷空气影响中东部地区", | ||
Size: 2838236, | ||
Quality: "896x504", | ||
}, | ||
}, | ||
} | ||
for _, tt := range tests { | ||
t.Run(tt.name, func(t *testing.T) { | ||
data := Iqiyi(tt.args.URL) | ||
test.Check(t, tt.args, data) | ||
}) | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters