抖音APP的視頻數據采集方法(簡書首發)

一、前言

從現在開始會偶爾寫一些付費的內容,之所以要寫付費內容,主要基于以下幾點,占比權重依次降低。
1、我喜歡錢。
2、建立有用知識的門檻,把有用的東西給予真正需要的人。
3、通過付費倒逼我寫出更好的文章,如果文章不好你可以盡情吐槽,前提是你花了錢。

二、抖音介紹

抖音現在真的是越來越火,我們公司的“一面APP”也想做對抖音APP的數據抓取。基于此,我下載抖音,開始研究它的HTTP請求內容,后來我發現它有毒,越刷越上癮,總感覺下一個視頻一定會更精彩,根本停不下來,似乎早已忘記當初為什么下載抖音...
當然,最后我還是控制著了。

三、獲取抖音中某個“挑戰”下熱門視頻及單個視頻的URL

關于對APP進行抓包的方法,在這我不做講解,這個方法在網上可以找到很多相關資料(收費價值不大)。

如果我們要獲取抖音中某個“挑戰”下熱門視頻,大概的步驟如下:
1)配置好Fiddler或Charles(我這邊是使用Charles),通過Charles可以對手機APP進行抓包,如下圖1所示;

圖1

2)在抖音APP上進行挑戰的內容搜索,例如搜索“絕地求生”,如下圖2所示;

圖2

3)點擊“絕地求生”挑戰,查看Charles中的HTTP請求數據,找出獲取挑戰下視頻的API,如下圖3所示;

圖3

我們發現在我們點擊“絕地求生”進入這個挑戰的詳情頁面時,抖音APP向服務端申請了兩個接口請求。
一個是detail,它里面包含的是這個挑戰的一些具體信息,因為我需要的是視頻信息,所以這個我們先不管。
另一個是aweme,它的接口內容如下:

https://aweme.snssdk.com/aweme/v1/challenge/aweme/?iid=30373511894&device_id=35781128184&os_api=18&app_name=aweme&channel=App%20Store&idfa=811A8841-030F-4AEA-B934-C2A56489C32D&device_platform=iphone&build_number=17805&vid=A4BB3AF4-7981-4805-995B-78419881DC11&openudid=99bf2b608173e21cefd562496d2cf21fa8eba580&device_type=iPhone7,2&app_version=1.7.8&version_code=1.7.8&os_version=11.3&screen_width=750&aid=1128&ac=WIFI&ch_id=1574030716416014&count=21&cursor=0&pull_type=2&query_type=0&type=5&mas=001469ed4a7a3f61de046e21c8c7ae8bcb64a983471da18ec0c8d1&as=a1c5206d9e676a38ee4960&ts=1524500606

同時通過查看這個接口返回的JSON數據,也確定這個是獲取視頻的API,如下是返回的JSON視頻數據(只保留aweme_list中的第一條數據,用于分析):

{
  "has_more" : 1,
  "cursor" : 21,
  "rid" : "201804240023290100100511301210FF",
  "status_code" : 0,
  "extra" : {
    "logid" : "201804240023290100100511301210FF",
    "now" : 1524500609305,
    "fatal_item_ids" : []
  },
  "aweme_list" : [
    {
      "text_extra" : [],
      "status" : {
        "is_delete" : false,
        "allow_share" : true,
        "is_private" : false,
        "allow_comment" : true,
        "private_status" : 0,
        "with_goods" : false
      },
      "author_user_id" : 60978405851,
      "is_hash_tag" : 0,
      "create_time" : 1501112821,
      "aweme_type" : 0,
      "cha_list" : [
        {
          "schema" : "aweme:\/\/aweme\/challenge\/detail?cid=1574030716416014",
          "user_count" : 0,
          "author" : {},
          "cha_name" : "絕地求生",
          "type" : 0,
          "desc" : "吃雞吃雞!今晚吃雞!",
          "cid" : "1574030716416014"
        }
      ],
      "region" : "CN",
      "user_digged" : 0,
      "share_info" : {
        "share_weibo_desc" : "#在抖音,記錄美好生活#空氣泳",
        "share_title" : "空氣泳",
        "share_url" : "https:\/\/www.iesdouyin.com\/share\/video\/6447230455191178509\/?region=CN&mid=6443685673772944141&titleType=title",
        "share_desc" : "在抖音,記錄美好生活"
      },
      "video" : {
        "dynamic_cover" : {
          "url_list" : [
            "https:\/\/p3.pstatp.com\/obj\/30b20017abc8da2a1379",
            "https:\/\/pb9.pstatp.com\/obj\/30b20017abc8da2a1379",
            "https:\/\/pb3.pstatp.com\/obj\/30b20017abc8da2a1379"
          ],
          "uri" : "30b20017abc8da2a1379"
        },
        "play_addr_lowbr" : {
          "url_list" : [
            "https:\/\/aweme.snssdk.com\/aweme\/v1\/play\/?video_id=fe29c6e0c74a40f6baf22400552d6d2f&line=0&ratio=720p&media_type=4&vr_type=0&test_cdn=None&improve_bitrate=0",
            "https:\/\/api.amemv.com\/aweme\/v1\/play\/?video_id=fe29c6e0c74a40f6baf22400552d6d2f&line=0&ratio=720p&media_type=4&vr_type=0&test_cdn=None&improve_bitrate=0",
            "https:\/\/aweme.snssdk.com\/aweme\/v1\/play\/?video_id=fe29c6e0c74a40f6baf22400552d6d2f&line=1&ratio=720p&media_type=4&vr_type=0&test_cdn=None&improve_bitrate=0",
            "https:\/\/api.amemv.com\/aweme\/v1\/play\/?video_id=fe29c6e0c74a40f6baf22400552d6d2f&line=1&ratio=720p&media_type=4&vr_type=0&test_cdn=None&improve_bitrate=0"
          ],
          "uri" : "fe29c6e0c74a40f6baf22400552d6d2f"
        },
        "width" : 540,
        "ratio" : "720p",
        "play_addr" : {
          "url_list" : [
            "https:\/\/aweme.snssdk.com\/aweme\/v1\/play\/?video_id=fe29c6e0c74a40f6baf22400552d6d2f&line=0&ratio=720p&media_type=4&vr_type=0&test_cdn=None&improve_bitrate=0",
            "https:\/\/api.amemv.com\/aweme\/v1\/play\/?video_id=fe29c6e0c74a40f6baf22400552d6d2f&line=0&ratio=720p&media_type=4&vr_type=0&test_cdn=None&improve_bitrate=0",
            "https:\/\/aweme.snssdk.com\/aweme\/v1\/play\/?video_id=fe29c6e0c74a40f6baf22400552d6d2f&line=1&ratio=720p&media_type=4&vr_type=0&test_cdn=None&improve_bitrate=0",
            "https:\/\/api.amemv.com\/aweme\/v1\/play\/?video_id=fe29c6e0c74a40f6baf22400552d6d2f&line=1&ratio=720p&media_type=4&vr_type=0&test_cdn=None&improve_bitrate=0"
          ],
          "uri" : "fe29c6e0c74a40f6baf22400552d6d2f"
        },
        "cover" : {
          "url_list" : [
            "https:\/\/p1.pstatp.com\/aweme\/300x400\/30b600031f0eca5498aa.jpeg",
            "https:\/\/pb3.pstatp.com\/aweme\/300x400\/30b600031f0eca5498aa.jpeg",
            "https:\/\/pb3.pstatp.com\/aweme\/300x400\/30b600031f0eca5498aa.jpeg"
          ],
          "uri" : "300x400\/30b600031f0eca5498aa"
        },
        "height" : 960,
        "bit_rate" : [
          {
            "bit_rate" : 4325045,
            "gear_name" : "normal",
            "quality_type" : 0
          }
        ],
        "origin_cover" : {
          "url_list" : [
            "http:\/\/p1.pstatp.com\/large\/30b600031f0eca5498aa.jpeg",
            "http:\/\/pb3.pstatp.com\/large\/30b600031f0eca5498aa.jpeg",
            "http:\/\/pb3.pstatp.com\/large\/30b600031f0eca5498aa.jpeg"
          ],
          "uri" : "large\/30b600031f0eca5498aa"
        },
        "duration" : 3820,
        "download_addr" : {
          "url_list" : [
            "https:\/\/aweme.snssdk.com\/aweme\/v1\/play\/?video_id=fe29c6e0c74a40f6baf22400552d6d2f&line=0&ratio=720p&watermark=1&media_type=4&vr_type=0&test_cdn=None&improve_bitrate=0",
            "https:\/\/api.amemv.com\/aweme\/v1\/play\/?video_id=fe29c6e0c74a40f6baf22400552d6d2f&line=0&ratio=720p&watermark=1&media_type=4&vr_type=0&test_cdn=None&improve_bitrate=0",
            "https:\/\/aweme.snssdk.com\/aweme\/v1\/play\/?video_id=fe29c6e0c74a40f6baf22400552d6d2f&line=1&ratio=720p&watermark=1&media_type=4&vr_type=0&test_cdn=None&improve_bitrate=0",
            "https:\/\/api.amemv.com\/aweme\/v1\/play\/?video_id=fe29c6e0c74a40f6baf22400552d6d2f&line=1&ratio=720p&watermark=1&media_type=4&vr_type=0&test_cdn=None&improve_bitrate=0"
          ],
          "uri" : "fe29c6e0c74a40f6baf22400552d6d2f"
        },
        "has_watermark" : true
      },
      "is_vr" : false,
      "vr_type" : 0,
      "share_url" : "https:\/\/www.douyin.com\/share\/video\/6447230455191178509\/?mid=6443685673772944141",
      "sort_label" : "",
      "music" : {
        "cover_hd" : {
          "url_list" : [
            "http:\/\/p3.pstatp.com\/live\/1080x1080\/2bd9005342019b56cf7e.jpeg"
          ],
          "uri" : "2bd9005342019b56cf7e"
        },
        "cover_large" : {
          "url_list" : [
            "http:\/\/p3.pstatp.com\/live\/720x720\/2bd9005342019b56cf7e.jpeg"
          ],
          "uri" : "2bd9005342019b56cf7e"
        },
        "status" : 1,
        "extra" : "{\"has_edited\": 0}",
        "user_count" : 0,
        "title" : "Iceland",
        "duration" : 32,
        "play_url" : {
          "url_list" : [
            "http:\/\/p1.pstatp.com\/obj\/29c70000654ea97a6169",
            "http:\/\/p9.pstatp.com\/obj\/29c70000654ea97a6169",
            "http:\/\/p3.pstatp.com\/obj\/29c70000654ea97a6169"
          ],
          "uri" : "29c70000654ea97a6169"
        },
        "mid" : "6443685673772944141",
        "offline_desc" : "",
        "schema_url" : "",
        "cover_medium" : {
          "url_list" : [
            "http:\/\/p3.pstatp.com\/live\/200x200\/2bd9005342019b56cf7e.jpeg"
          ],
          "uri" : "2bd9005342019b56cf7e"
        },
        "is_original" : false,
        "id" : 6443685673772944141,
        "cover_thumb" : {
          "url_list" : [
            "http:\/\/p3.pstatp.com\/live\/100x100\/2bd9005342019b56cf7e.jpeg"
          ],
          "uri" : "2bd9005342019b56cf7e"
        },
        "audio_track" : {
          "url_list" : [
            "https:\/\/p1.pstatp.com\/obj\/46bd000dbd65c3dfd8ba",
            "https:\/\/pb3.pstatp.com\/obj\/46bd000dbd65c3dfd8ba",
            "https:\/\/pb3.pstatp.com\/obj\/46bd000dbd65c3dfd8ba"
          ],
          "uri" : "46bd000dbd65c3dfd8ba"
        },
        "effects_data" : {
          "url_list" : [
            "https:\/\/p1.pstatp.com\/obj\/2efe00235ebf732bb56f",
            "https:\/\/pb3.pstatp.com\/obj\/2efe00235ebf732bb56f",
            "https:\/\/pb3.pstatp.com\/obj\/2efe00235ebf732bb56f"
          ],
          "uri" : "2efe00235ebf732bb56f"
        },
        "source_platform" : 22,
        "author" : "FlyBoy,Gavrielle",
        "id_str" : "6443685673772944141"
      },
      "is_top" : 0,
      "aweme_id" : "6447230455191178509",
      "cmt_swt" : false,
      "risk_infos" : {
        "warn" : false,
        "content" : "",
        "risk_sink" : false,
        "type" : 0
      },
      "label_origin_author" : {
        "url_list" : [
          "https:\/\/p3.pstatp.com\/obj\/216a001ff805affc1dab",
          "https:\/\/pb9.pstatp.com\/obj\/216a001ff805affc1dab",
          "https:\/\/pb3.pstatp.com\/obj\/216a001ff805affc1dab"
        ],
        "uri" : "216a001ff805affc1dab"
      },
      "label_origin_author_text" : "發起者",
      "label_top" : {
        "url_list" : [
          "https:\/\/p3.pstatp.com\/obj\/c150000f34767e2cb56",
          "https:\/\/pb9.pstatp.com\/obj\/c150000f34767e2cb56",
          "https:\/\/pb3.pstatp.com\/obj\/c150000f34767e2cb56"
        ],
        "uri" : "c150000f34767e2cb56"
      },
      "is_ads" : false,
      "statistics" : {
        "digg_count" : 19578,
        "aweme_id" : "6447230455191178509",
        "share_count" : 283,
        "play_count" : 1296122,
        "comment_count" : 100
      },
      "video_labels" : [],
      "rate" : 12,
      "bodydance_score" : 0,
      "desc" : "空氣泳",
      "author" : {
        "special_lock" : 0,
        "is_binded_weibo" : false,
        "shield_follow_notice" : 0,
        "nickname_lock" : 0,
        "avatar_larger" : {
          "url_list" : [
            "https:\/\/p1.pstatp.com\/aweme\/1080x1080\/38c90028f622dd195aaf.jpeg",
            "https:\/\/pb3.pstatp.com\/aweme\/1080x1080\/38c90028f622dd195aaf.jpeg",
            "https:\/\/pb3.pstatp.com\/aweme\/1080x1080\/38c90028f622dd195aaf.jpeg"
          ],
          "uri" : "38c90028f622dd195aaf"
        },
        "follow_status" : 0,
        "with_commerce_entry" : false,
        "original_music_qrcode" : null,
        "authority_status" : 0,
        "is_ad_fake" : false,
        "prevent_download" : false,
        "enterprise_verify" : false,
        "verification_type" : 1,
        "app_id" : 1128,
        "weibo_url" : "",
        "community_discipline_status" : 0,
        "risk_flag" : 0,
        "need_recommend" : 1,
        "live_rec_level" : 0,
        "unique_id" : "MysticzZ",
        "hide_location" : false,
        "enterprise_verify_reason" : "",
        "short_id" : "17612748",
        "account_region" : "",
        "star_use_new_download" : false,
        "signature" : "頹",
        "avatar_medium" : {
          "url_list" : [
            "https:\/\/p1.pstatp.com\/aweme\/720x720\/38c90028f622dd195aaf.jpeg",
            "https:\/\/pb3.pstatp.com\/aweme\/720x720\/38c90028f622dd195aaf.jpeg",
            "https:\/\/pb3.pstatp.com\/aweme\/720x720\/38c90028f622dd195aaf.jpeg"
          ],
          "uri" : "38c90028f622dd195aaf"
        },
        "verify_info" : "",
        "create_time" : 1495648525,
        "story_open" : false,
        "region" : "CN",
        "hide_search" : false,
        "avatar_thumb" : {
          "url_list" : [
            "https:\/\/p1.pstatp.com\/aweme\/100x100\/38c90028f622dd195aaf.jpeg",
            "https:\/\/pb3.pstatp.com\/aweme\/100x100\/38c90028f622dd195aaf.jpeg",
            "https:\/\/pb3.pstatp.com\/aweme\/100x100\/38c90028f622dd195aaf.jpeg"
          ],
          "uri" : "38c90028f622dd195aaf"
        },
        "school_poi_id" : "",
        "update_before" : 0,
        "shield_comment_notice" : 0,
        "original_music_cover" : null,
        "shield_digg_notice" : 0,
        "bind_phone" : "",
        "live_verify" : 0,
        "birthday" : "1999-03-28",
        "school_type" : 0,
        "uid" : "60978405851",
        "avatar_uri" : "38c90028f622dd195aaf",
        "weibo_schema" : "",
        "is_verified" : true,
        "custom_verify" : "",
        "commerce_user_level" : 0,
        "gender" : 1,
        "has_register_notice" : 0,
        "reflow_page_gid" : 0,
        "reflow_page_uid" : 0,
        "nickname" : "Atlantis.",
        "weibo_verify" : "",
        "language" : "zh-Hans",
        "share_qrcode_uri" : "216a0035fc39c9e9376f",
        "room_id" : 0,
        "constellation" : 1,
        "school_name" : "",
        "weibo_name" : ""
      },
      "is_relieve" : false
    },
    {
        ...第二條數據
    }
    ...其他更多的數據
  ]
}

4)對這個API進行分析(破解或者繞過API的加密),找出可以直接獲取JSON數據的純種API;
API的內容為:
https://aweme.snssdk.com/aweme/v1/challenge/aweme/?iid=30373511894&device_id=35781128184&os_api=18&app_name=aweme&channel=App%20Store&idfa=811A8841-030F-4AEA-B934-C2A56489C32D&device_platform=iphone&build_number=17805&vid=A4BB3AF4-7981-4805-995B-78419881DC11&openudid=99bf2b608173e21cefd562496d2cf21fa8eba580&device_type=iPhone7,2&app_version=1.7.8&version_code=1.7.8&os_version=11.3&screen_width=750&aid=1128&ac=WIFI&ch_id=1574030716416014&count=21&cursor=0&pull_type=2&query_type=0&type=5&mas=001469ed4a7a3f61de046e21c8c7ae8bcb64a983471da18ec0c8d1&as=a1c5206d9e676a38ee4960&ts=1524500606
為了便于分析,我們先把一些無關的手機設備和版本信息除掉: https://aweme.snssdk.com/aweme/v1/challenge/aweme/?ch_id=1574030716416014&count=21&cursor=0&pull_type=2&query_type=0&type=5&as=a1c5206d9e676a38ee4960&ts=1524500606
它現在只剩下ch_id、count、cursor、pull_type、query_type、type、as以及ts幾個參數,其中pull_type、query_type和type三個是固定的,不用管。cursor和count是獲取的數據的開始和數量,ch_id應該是挑戰的唯一標示。接下來就是as和ts兩個參數,通過多次實驗,我們發現這個API使用了as和cp參數進行了加密處理,也就是說我們無法使用這個API直接獲取到API的數據,需要對as、ts的加密算法進行破解。當然,上面我也提過,面對這個情況,要么破解算法要么繞過加密,原則上是能夠繞過的就不要選擇破解,因為破解的難度很大,需要逆向,這個以后再講(我也沒做過)。
APP或PC上破解不了的接口,可以嘗試使用m站。這個是我們的一貫原則。
我們發現抖音中的挑戰有一個分享按鈕,我們試著分享出這個H5頁面來進行分析,分享之后的URL為:
https://www.iesdouyin.com/share/challenge/1574030716416014?utm_campaign=client_share&app=aweme&utm_medium=ios&iid=30373511894&utm_source=weixin&tt_from=weixin&utm_source=weixin&utm_medium=aweme_ios&utm_campaign=client_share&uid=58875748483&did=30373511894
在瀏覽器上打開這個URL,通過分析它的請求,只看XHR,見下圖4:

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
支付 ¥2.99 繼續閱讀
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 228,739評論 6 534
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,634評論 3 419
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 176,653評論 0 377
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,063評論 1 314
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,835評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,235評論 1 324
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,315評論 3 442
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,459評論 0 289
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,000評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,819評論 3 355
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,004評論 1 370
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,560評論 5 362
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,257評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,676評論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,937評論 1 288
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,717評論 3 393
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,003評論 2 374

推薦閱讀更多精彩內容