抖音视频去水印接口分析 | 增加X-Bogus等验证 | 附API接口源码(2023-3-2更新)

相关阅读

抖音视频去水印接口分析 | 附API接口源码(2022-12-24更新)-自由者联盟
抖音视频去水印接口分析 | 附API接口源码(2022-12-24更新)-自由者联盟

杂谈

最近有很多热心网友反馈抖音去水印又不行了,之前是时不时被blocked,现在直接连内容都没有了,返回直接就是空了,我们今天简要给大家分析一下请求过程,并附上X-Bogus生成接口及源码。

在线版体验

请求过程分析

我们还是先获取一个抖音链接

https://v.douyin.com/S2pF3G8/

通过访问重定向

https://www.douyin.com/video/7190042191169883427

然后提取到其中的视频ID

7190042191169883427

如果是之前,我们会直接GET请求

https://www.douyin.com/aweme/v1/web/aweme/detail/?aweme_id=7190042191169883427

然后就能得到响应内容了。

但是这种方法已经失效了,今天我们会讲解如何在增加一些请求头参数以及X-Bogus后,可以仍然获取到JSON格式的数据。

URL参数X-Bogus

X-Bogus你可以理解为是一个根据视频ID及user-agent通过JS生成的用户信息参数,它可以用于校验,详细的一篇分析可以参考Freebuf上的《【JS 逆向百例】某音 X-Bogus 逆向分析,JSVMP 纯算法还原》

我们这里已经给大家部署好相关的接口了,你可以POST请求https://tiktok.iculture.cc/X-Bogus,然后请求是JSON格式的,传入你的urluser-agent

{
    "url":"https://www.douyin.com/aweme/v1/web/aweme/detail/?aweme_id=7190049956269444386&aid=1128&version_name=23.5.0&device_platform=android&os_version=2333",
    "user_agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/109.0.0.0 Safari/537.36"
}

之后你就会得到如下JSON返回结果

{
    "X-Bogus": "DFSzswSLfwUANnEftaw7nt9WcBJN",
    "param": "https://www.douyin.com/aweme/v1/web/aweme/detail/?aweme_id=7190049956269444386&aid=1128&version_name=23.5.0&device_platform=android&os_version=2333&X-Bogus=DFSzswSLfwUANnEftaw7nt9WcBJN"
}

为了方便使用,我这里将param字段已经做成了URL加上X-Bogus参数的结果了,你可以直接调用即可

然后,我们现在获取到的param如下

https://www.douyin.com/aweme/v1/web/aweme/detail/?aweme_id=7190049956269444386&aid=1128&version_name=23.5.0&device_platform=android&os_version=2333&X-Bogus=DFSzswSLfwUANnEftaw7nt9WcBJN

你如果放到浏览器里,会发现依旧是什么也访问不到

图片[1]-抖音视频去水印接口分析 |  增加X-Bogus等验证 | 附API接口源码(2023-3-2更新)-FancyPig's blog

接下来我们需要在请求头中加入其他参数

Cookie参数

完整的Cookie需要包含以下内容

msToken=uTa38b9QFHB6JtEDzH9S4np17qxpG6OrROHQ8at2cBpoKfUb0UWmTkjCSpf72EcUrJgWTIoN6UgAv5BTXtCbOAhJcIRKyZIT7TMYapeOSpf;odin_tt=324fb4ea4a89c0c05827e18a1ed9cf9bf8a17f7705fcc793fec935b637867e2a5a9b8168c885554d029919117a18ba69; ttwid=1%7CWBuxH_bhbuTENNtACXoesI5QHV2Dt9-vkMGVHSRRbgY%7C1677118712%7C1d87ba1ea2cdf05d80204aea2e1036451dae638e7765b8a4d59d87fa05dd39ff; bd_ticket_guard_client_data=eyJiZC10aWNrZXQtZ3VhcmQtdmVyc2lvbiI6MiwiYmQtdGlja2V0LWd1YXJkLWNsaWVudC1jc3IiOiItLS0tLUJFR0lOIENFUlRJRklDQVRFIFJFUVVFU1QtLS0tLVxyXG5NSUlCRFRDQnRRSUJBREFuTVFzd0NRWURWUVFHRXdKRFRqRVlNQllHQTFVRUF3d1BZbVJmZEdsamEyVjBYMmQxXHJcbllYSmtNRmt3RXdZSEtvWkl6ajBDQVFZSUtvWkl6ajBEQVFjRFFnQUVKUDZzbjNLRlFBNUROSEcyK2F4bXAwNG5cclxud1hBSTZDU1IyZW1sVUE5QTZ4aGQzbVlPUlI4NVRLZ2tXd1FJSmp3Nyszdnc0Z2NNRG5iOTRoS3MvSjFJc3FBc1xyXG5NQ29HQ1NxR1NJYjNEUUVKRGpFZE1Cc3dHUVlEVlIwUkJCSXdFSUlPZDNkM0xtUnZkWGxwYmk1amIyMHdDZ1lJXHJcbktvWkl6ajBFQXdJRFJ3QXdSQUlnVmJkWTI0c0RYS0c0S2h3WlBmOHpxVDRBU0ROamNUb2FFRi9MQnd2QS8xSUNcclxuSURiVmZCUk1PQVB5cWJkcytld1QwSDZqdDg1czZZTVNVZEo5Z2dmOWlmeTBcclxuLS0tLS1FTkQgQ0VSVElGSUNBVEUgUkVRVUVTVC0tLS0tXHJcbiJ9

准确来说就是三个参数

  • msToken
  • odin_tt
  • bd_ticket_guard_client_data

msToken

Cookie中需要包含msToken,该参数其实就是一个107位的随机数,由大小写英文字母、数字组成

如果你想生成可以使用对应的代码实现,我这里简要举几个例子,譬如Python

    def generate_random_str(self, randomlength=107):
        """
        根据传入长度产生随机字符串
        """
        random_str = ''
        base_str = 'ABCDEFGHIGKLMNOPQRSTUVWXYZabcdefghigklmnopqrstuvwxyz0123456789='
        length = len(base_str) - 1
        for _ in range(randomlength):
            random_str += base_str[random.randint(0, length)]
        return random_str

或者通过PHP实现

        $msToken = substr(str_shuffle('0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'), 0, 107);

odin_tt

原则上这个字段是通过请求获得的,我们这里直接写死

odin_tt=324fb4ea4a89c0c05827e18a1ed9cf9bf8a17f7705fcc793fec935b637867e2a5a9b8168c885554d029919117a18ba69; ttwid=1%7CWBuxH_bhbuTENNtACXoesI5QHV2Dt9-vkMGVHSRRbgY%7C1677118712%7C1d87ba1ea2cdf05d80204aea2e1036451dae638e7765b8a4d59d87fa05dd39ff; 

也是可以使用的,我们这里简要分析下,如果你要每次都获取,应该从哪个接口获取。

我们这里需要使用POST请求https://ttwid.bytedance.com/ttwid/union/register/,请求体格式为JSON格式

{"region":"cn","aid":1768,"needFid":false,"service":"www.ixigua.com","migrate_info":{"ticket":"","source":"node"},"cbUrlProtocol":"https","union":true}

之后你会在响应头Set-Cookie中得到

ttwid=1%7C7ZLJzwjjEw7NLeADTpVd-3eId-ZEIg0jpCEzTV9p_2A%7C1677681848%7C4ff4f97328ddc18b6d46c259bc26a05d2e654b50e3f21b27b8f9e9e8f9fcec82; Path=/; Domain=bytedance.com; Max-Age=31536000; HttpOnly; Secure

其中ttwid就在最前面

ttwid=1%7C7ZLJzwjjEw7NLeADTpVd-3eId-ZEIg0jpCEzTV9p_2A%7C1677681848%7C4ff4f97328ddc18b6d46c259bc26a05d2e654b50e3f21b27b8f9e9e8f9fcec82;

bd_ticket_guard_client_data

bd_ticket_guard_client_data直接写死就行了

bd_ticket_guard_client_data=eyJiZC10aWNrZXQtZ3VhcmQtdmVyc2lvbiI6MiwiYmQtdGlja2V0LWd1YXJkLWNsaWVudC1jc3IiOiItLS0tLUJFR0lOIENFUlRJRklDQVRFIFJFUVVFU1QtLS0tLVxyXG5NSUlCRFRDQnRRSUJBREFuTVFzd0NRWURWUVFHRXdKRFRqRVlNQllHQTFVRUF3d1BZbVJmZEdsamEyVjBYMmQxXHJcbllYSmtNRmt3RXdZSEtvWkl6ajBDQVFZSUtvWkl6ajBEQVFjRFFnQUVKUDZzbjNLRlFBNUROSEcyK2F4bXAwNG5cclxud1hBSTZDU1IyZW1sVUE5QTZ4aGQzbVlPUlI4NVRLZ2tXd1FJSmp3Nyszdnc0Z2NNRG5iOTRoS3MvSjFJc3FBc1xyXG5NQ29HQ1NxR1NJYjNEUUVKRGpFZE1Cc3dHUVlEVlIwUkJCSXdFSUlPZDNkM0xtUnZkWGxwYmk1amIyMHdDZ1lJXHJcbktvWkl6ajBFQXdJRFJ3QXdSQUlnVmJkWTI0c0RYS0c0S2h3WlBmOHpxVDRBU0ROamNUb2FFRi9MQnd2QS8xSUNcclxuSURiVmZCUk1PQVB5cWJkcytld1QwSDZqdDg1czZZTVNVZEo5Z2dmOWlmeTBcclxuLS0tLS1FTkQgQ0VSVElGSUNBVEUgUkVRVUVTVC0tLS0tXHJcbiJ9

请求头其他参数

除了Cookie之外,其他的你还可以携带以下内容

User-Agent : Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/109.0.0.0 Safari/537.36
Referer : https://www.douyin.com/

最终完整请求

为了方便复现,我把curl命令也复制下来,方便各位改写自己的代码

curl --location --request GET 'https://www.douyin.com/aweme/v1/web/aweme/detail/?aweme_id=7190042191169883427&aid=1128&version_name=23.5.0&device_platform=android&os_version=2333&X-Bogus=DFSzswSLEjvANnEftawF309WcBjK' \
--header 'User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/109.0.0.0 Safari/537.36' \
--header 'Referer: https://www.douyin.com/' \
--header 'Cookie: msToken=uTa38b9QFHB6JtEDzH9S4np17qxpG6OrROHQ8at2cBpoKfUb0UWmTkjCSpf72EcUrJgWTIoN6UgAv5BTXtCbOAhJcIRKyZIT7TMYapeOSpf;odin_tt=324fb4ea4a89c0c05827e18a1ed9cf9bf8a17f7705fcc793fec935b637867e2a5a9b8168c885554d029919117a18ba69; ttwid=1%7CWBuxH_bhbuTENNtACXoesI5QHV2Dt9-vkMGVHSRRbgY%7C1677118712%7C1d87ba1ea2cdf05d80204aea2e1036451dae638e7765b8a4d59d87fa05dd39ff; bd_ticket_guard_client_data=eyJiZC10aWNrZXQtZ3VhcmQtdmVyc2lvbiI6MiwiYmQtdGlja2V0LWd1YXJkLWNsaWVudC1jc3IiOiItLS0tLUJFR0lOIENFUlRJRklDQVRFIFJFUVVFU1QtLS0tLVxyXG5NSUlCRFRDQnRRSUJBREFuTVFzd0NRWURWUVFHRXdKRFRqRVlNQllHQTFVRUF3d1BZbVJmZEdsamEyVjBYMmQxXHJcbllYSmtNRmt3RXdZSEtvWkl6ajBDQVFZSUtvWkl6ajBEQVFjRFFnQUVKUDZzbjNLRlFBNUROSEcyK2F4bXAwNG5cclxud1hBSTZDU1IyZW1sVUE5QTZ4aGQzbVlPUlI4NVRLZ2tXd1FJSmp3Nyszdnc0Z2NNRG5iOTRoS3MvSjFJc3FBc1xyXG5NQ29HQ1NxR1NJYjNEUUVKRGpFZE1Cc3dHUVlEVlIwUkJCSXdFSUlPZDNkM0xtUnZkWGxwYmk1amIyMHdDZ1lJXHJcbktvWkl6ajBFQXdJRFJ3QXdSQUlnVmJkWTI0c0RYS0c0S2h3WlBmOHpxVDRBU0ROamNUb2FFRi9MQnd2QS8xSUNcclxuSURiVmZCUk1PQVB5cWJkcytld1QwSDZqdDg1czZZTVNVZEo5Z2dmOWlmeTBcclxuLS0tLS1FTkQgQ0VSVElGSUNBVEUgUkVRVUVTVC0tLS0tXHJcbiJ9' \
--header 'Accept: */*' \
--header 'Host: www.douyin.com' \
--header 'Connection: keep-alive'

我们这里使用Apifox请求看下效果,可以看到Get请求中参数携带X-Bogus

图片[2]-抖音视频去水印接口分析 |  增加X-Bogus等验证 | 附API接口源码(2023-3-2更新)-FancyPig's blog

并且请求头中携带CookieRefererUser-Agent后,就可以获取到数据了

图片[3]-抖音视频去水印接口分析 |  增加X-Bogus等验证 | 附API接口源码(2023-3-2更新)-FancyPig's blog

JSON返回内容没有任何变化

{
    "aweme_detail": {
        "admire_auth": {
            "admire_button": 0,
            "is_admire": 0,
            "is_click_admire_icon_recently": 0,
            "is_fifty_admire_author_stable_fans": 0,
            "is_show_admire_button": 0,
            "is_show_admire_tab": 0
        },
        "anchors": null,
        "authentication_token": "MS4wLjAAAAAAF39nBAIJZO2rdLXJLjugoycsGV6DTiXema5BvwxUinV54yNKqfu0kbhKjohd1M8GwXVUaFPjN9plTA4_Tn3a-f0wEMdiBpsZnuqN6-m3BMdbXsVX_ZFlNbGBldM51CvMn9WNugMCyh5zQfsJ2HFEsAYQD4QETuLu9xQRZi9ZqQW9zA3egun5prwXyWo4WLk2",
        "author": {
            "avatar_thumb": {
                "height": 720,
                "uri": "100x100/aweme-avatar/tos-cn-i-0813_3733d4f3f0ef44c99edf7801729a47db",
                "url_list": [
                    "https://p3.douyinpic.com/aweme/100x100/aweme-avatar/tos-cn-i-0813_3733d4f3f0ef44c99edf7801729a47db.webp?from=116350172",
                    "https://p26.douyinpic.com/aweme/100x100/aweme-avatar/tos-cn-i-0813_3733d4f3f0ef44c99edf7801729a47db.webp?from=116350172",
                    "https://p6.douyinpic.com/aweme/100x100/aweme-avatar/tos-cn-i-0813_3733d4f3f0ef44c99edf7801729a47db.webp?from=116350172",
                    "https://p3.douyinpic.com/aweme/100x100/aweme-avatar/tos-cn-i-0813_3733d4f3f0ef44c99edf7801729a47db.jpeg?from=116350172"
                ],
                "width": 720
            },
            "cf_list": null,
            "close_friend_type": 0,
            "contacts_status": 2,
            "contrail_list": null,
            "cover_url": [
                {
                    "height": 720,
                    "uri": "c8510002be9a3a61aad2",
                    "url_list": [
                        "https://p26-sign.douyinpic.com/obj/c8510002be9a3a61aad2?x-expires=1678957200&x-signature=Xm80YvFSAYICJVEiOromYQlifjM%3D&from=116350172",
                        "https://p3-sign.douyinpic.com/obj/c8510002be9a3a61aad2?x-expires=1678957200&x-signature=CeVrQE2FsJeZpqd%2BuMHlTUHJtfM%3D&from=116350172",
                        "https://p9-sign.douyinpic.com/obj/c8510002be9a3a61aad2?x-expires=1678957200&x-signature=P6V%2B4njQ9PBKqLHg4A%2BgHhfnJVQ%3D&from=116350172"
                    ],
                    "width": 720
                }
            ],
            "create_time": 0,
            "custom_verify": "",
            "data_label_list": null,
            "endorsement_info_list": null,
            "enterprise_verify_reason": "",
            "favoriting_count": 2091,
            "follow_status": 0,
            "follower_count": 0,
            "follower_list_secondary_information_struct": null,
            "follower_status": 0,
            "following_count": 0,
            "im_role_ids": null,
            "is_ad_fake": false,
            "is_blocked_v2": false,
            "is_blocking_v2": false,
            "is_cf": 0,
            "max_follower_count": 0,
            "nickname": "KvKv",
            "not_seen_item_id_list": null,
            "not_seen_item_id_list_v2": null,
            "offline_info_list": null,
            "personal_tag_list": null,
            "prevent_download": false,
            "risk_notice_text": "",
            "sec_uid": "MS4wLjABAAAAEpTH6K-RrXpvt1sJ5GJ9EJ-76gRdvskpF8G3VXIvCoo0IEB-KcSP7ijVczEbKtaR",
            "secret": 0,
            "share_info": {
                "share_desc": "",
                "share_desc_info": "",
                "share_qrcode_url": {
                    "height": 720,
                    "uri": "31cbb0004d652d75b08bc",
                    "url_list": [
                        "https://p3-sign.douyinpic.com/obj/31cbb0004d652d75b08bc?x-expires=1677769200&x-signature=J%2BNgLFjG1QdzXTjgbNq%2FRpEBFUk%3D&from=116350172",
                        "https://p26-sign.douyinpic.com/obj/31cbb0004d652d75b08bc?x-expires=1677769200&x-signature=ottWdK2QdrNMSDLWfOy5sci2AFg%3D&from=116350172",
                        "https://p9-sign.douyinpic.com/obj/31cbb0004d652d75b08bc?x-expires=1677769200&x-signature=5BkO2Gs9OpLl6Yx%2Fv9eMLhOJV14%3D&from=116350172"
                    ],
                    "width": 720
                },
                "share_title": "",
                "share_title_myself": "",
                "share_title_other": "",
                "share_url": "",
                "share_weibo_desc": ""
            },
            "short_id": "39147506266",
            "signature": "搭配各种风格,变变变~\n欢迎加入我的抖音粉丝群❤\n请文明发言哦❤\n🧣:kvkvvvvv",
            "signature_extra": null,
            "special_follow_status": 0,
            "special_people_labels": null,
            "status": 1,
            "text_extra": null,
            "total_favorited": 555564,
            "uid": "4020229162931447",
            "unique_id": "g7m800",
            "user_age": 21,
            "user_canceled": false,
            "user_permissions": null,
            "verification_type": 1
        },
        "author_mask_tag": 0,
        "author_user_id": 4020229162931447,
        "aweme_acl": {
            "download_mask_panel": {
                "code": 1,
                "show_type": 0
            }
        },
        "aweme_control": {
            "can_comment": true,
            "can_forward": true,
            "can_share": true,
            "can_show_comment": true
        },
        "aweme_id": "7190042191169883427",
        "aweme_type": 0,
        "book_bar": {},
        "challenge_position": null,
        "chapter_list": null,
        "collect_stat": 0,
        "collection_corner_mark": 0,
        "comment_gid": 7190042191169883427,
        "comment_list": null,
        "comment_permission_info": {
            "can_comment": true,
            "comment_permission_status": 0,
            "item_detail_entry": true,
            "press_entry": true,
            "toast_guide": false
        },
        "commerce_config_data": null,
        "common_bar_info": "[]",
        "component_info_v2": "{\"desc_lines_limit\":0,\"hide_marquee\":false}",
        "cover_labels": null,
        "create_time": 1674062172,
        "desc": "晚安啦~马上就要过年啦~趁着弟弟还小去抢他红包啦#写真约拍 #随拍 #写真 #穿搭 #摄影 ~",
        "descendants": {
            "notify_msg": "头条",
            "platforms": [
                "toutiao"
            ]
        },
        "digg_lottie": {
            "can_bomb": 0,
            "lottie_id": ""
        },
        "disable_relation_bar": 0,
        "dislike_dimension_list": null,
        "duet_aggregate_in_music_tab": false,
        "duration": 6734,
        "feed_comment_config": {
            "author_audit_status": 0,
            "input_config_text": "善语结善缘,恶言伤人心"
        },
        "geofencing": [],
        "geofencing_regions": null,
        "group_id": "7190042191169883427",
        "hybrid_label": null,
        "image_album_music_info": {
            "begin_time": 0,
            "end_time": 0,
            "volume": 0
        },
        "image_comment": {},
        "image_infos": null,
        "image_list": null,
        "images": null,
        "img_bitrate": null,
        "impression_data": {
            "group_id_list_a": [
                7190042191169883427
            ],
            "group_id_list_b": [
                7190042191169883427
            ],
            "group_id_list_c": null,
            "similar_id_list_a": null,
            "similar_id_list_b": null
        },
        "interaction_stickers": null,
        "is_ads": false,
        "is_collects_selected": 0,
        "is_duet_sing": false,
        "is_image_beat": false,
        "is_life_item": false,
        "is_share_post": false,
        "is_story": 0,
        "is_top": 0,
        "item_warn_notification": {
            "content": "",
            "show": false,
            "type": 0
        },
        "label_top_text": null,
        "long_video": null,
        "music": {
            "album": "",
            "artist_user_infos": null,
            "artists": [],
            "audition_duration": 6,
            "author": "KvKv",
            "author_deleted": false,
            "author_position": null,
            "author_status": 1,
            "avatar_large": {
                "height": 720,
                "uri": "1080x1080/aweme-avatar/tos-cn-i-0813_3733d4f3f0ef44c99edf7801729a47db",
                "url_list": [
                    "https://p26.douyinpic.com/aweme/1080x1080/aweme-avatar/tos-cn-i-0813_3733d4f3f0ef44c99edf7801729a47db.webp?from=116350172",
                    "https://p11.douyinpic.com/aweme/1080x1080/aweme-avatar/tos-cn-i-0813_3733d4f3f0ef44c99edf7801729a47db.webp?from=116350172",
                    "https://p3.douyinpic.com/aweme/1080x1080/aweme-avatar/tos-cn-i-0813_3733d4f3f0ef44c99edf7801729a47db.webp?from=116350172",
                    "https://p26.douyinpic.com/aweme/1080x1080/aweme-avatar/tos-cn-i-0813_3733d4f3f0ef44c99edf7801729a47db.jpeg?from=116350172"
                ],
                "width": 720
            },
            "avatar_medium": {
                "height": 720,
                "uri": "720x720/aweme-avatar/tos-cn-i-0813_3733d4f3f0ef44c99edf7801729a47db",
                "url_list": [
                    "https://p3.douyinpic.com/aweme/720x720/aweme-avatar/tos-cn-i-0813_3733d4f3f0ef44c99edf7801729a47db.webp?from=116350172",
                    "https://p11.douyinpic.com/aweme/720x720/aweme-avatar/tos-cn-i-0813_3733d4f3f0ef44c99edf7801729a47db.webp?from=116350172",
                    "https://p26.douyinpic.com/aweme/720x720/aweme-avatar/tos-cn-i-0813_3733d4f3f0ef44c99edf7801729a47db.webp?from=116350172",
                    "https://p3.douyinpic.com/aweme/720x720/aweme-avatar/tos-cn-i-0813_3733d4f3f0ef44c99edf7801729a47db.jpeg?from=116350172"
                ],
                "width": 720
            },
            "avatar_thumb": {
                "height": 720,
                "uri": "100x100/aweme-avatar/tos-cn-i-0813_3733d4f3f0ef44c99edf7801729a47db",
                "url_list": [
                    "https://p26.douyinpic.com/aweme/100x100/aweme-avatar/tos-cn-i-0813_3733d4f3f0ef44c99edf7801729a47db.webp?from=116350172",
                    "https://p3.douyinpic.com/aweme/100x100/aweme-avatar/tos-cn-i-0813_3733d4f3f0ef44c99edf7801729a47db.webp?from=116350172",
                    "https://p11.douyinpic.com/aweme/100x100/aweme-avatar/tos-cn-i-0813_3733d4f3f0ef44c99edf7801729a47db.webp?from=116350172",
                    "https://p26.douyinpic.com/aweme/100x100/aweme-avatar/tos-cn-i-0813_3733d4f3f0ef44c99edf7801729a47db.jpeg?from=116350172"
                ],
                "width": 720
            },
            "binded_challenge_id": 0,
            "can_background_play": true,
            "collect_stat": 0,
            "cover_hd": {
                "height": 720,
                "uri": "1080x1080/aweme-avatar/tos-cn-i-0813_3733d4f3f0ef44c99edf7801729a47db",
                "url_list": [
                    "https://p26.douyinpic.com/aweme/1080x1080/aweme-avatar/tos-cn-i-0813_3733d4f3f0ef44c99edf7801729a47db.webp?from=116350172",
                    "https://p11.douyinpic.com/aweme/1080x1080/aweme-avatar/tos-cn-i-0813_3733d4f3f0ef44c99edf7801729a47db.webp?from=116350172",
                    "https://p3.douyinpic.com/aweme/1080x1080/aweme-avatar/tos-cn-i-0813_3733d4f3f0ef44c99edf7801729a47db.webp?from=116350172",
                    "https://p26.douyinpic.com/aweme/1080x1080/aweme-avatar/tos-cn-i-0813_3733d4f3f0ef44c99edf7801729a47db.jpeg?from=116350172"
                ],
                "width": 720
            },
            "cover_large": {
                "height": 720,
                "uri": "1080x1080/aweme-avatar/tos-cn-i-0813_3733d4f3f0ef44c99edf7801729a47db",
                "url_list": [
                    "https://p26.douyinpic.com/aweme/1080x1080/aweme-avatar/tos-cn-i-0813_3733d4f3f0ef44c99edf7801729a47db.webp?from=116350172",
                    "https://p11.douyinpic.com/aweme/1080x1080/aweme-avatar/tos-cn-i-0813_3733d4f3f0ef44c99edf7801729a47db.webp?from=116350172",
                    "https://p3.douyinpic.com/aweme/1080x1080/aweme-avatar/tos-cn-i-0813_3733d4f3f0ef44c99edf7801729a47db.webp?from=116350172",
                    "https://p26.douyinpic.com/aweme/1080x1080/aweme-avatar/tos-cn-i-0813_3733d4f3f0ef44c99edf7801729a47db.jpeg?from=116350172"
                ],
                "width": 720
            },
            "cover_medium": {
                "height": 720,
                "uri": "720x720/aweme-avatar/tos-cn-i-0813_3733d4f3f0ef44c99edf7801729a47db",
                "url_list": [
                    "https://p3.douyinpic.com/aweme/720x720/aweme-avatar/tos-cn-i-0813_3733d4f3f0ef44c99edf7801729a47db.webp?from=116350172",
                    "https://p11.douyinpic.com/aweme/720x720/aweme-avatar/tos-cn-i-0813_3733d4f3f0ef44c99edf7801729a47db.webp?from=116350172",
                    "https://p26.douyinpic.com/aweme/720x720/aweme-avatar/tos-cn-i-0813_3733d4f3f0ef44c99edf7801729a47db.webp?from=116350172",
                    "https://p3.douyinpic.com/aweme/720x720/aweme-avatar/tos-cn-i-0813_3733d4f3f0ef44c99edf7801729a47db.jpeg?from=116350172"
                ],
                "width": 720
            },
            "cover_thumb": {
                "height": 720,
                "uri": "100x100/aweme-avatar/tos-cn-i-0813_3733d4f3f0ef44c99edf7801729a47db",
                "url_list": [
                    "https://p26.douyinpic.com/aweme/100x100/aweme-avatar/tos-cn-i-0813_3733d4f3f0ef44c99edf7801729a47db.webp?from=116350172",
                    "https://p3.douyinpic.com/aweme/100x100/aweme-avatar/tos-cn-i-0813_3733d4f3f0ef44c99edf7801729a47db.webp?from=116350172",
                    "https://p11.douyinpic.com/aweme/100x100/aweme-avatar/tos-cn-i-0813_3733d4f3f0ef44c99edf7801729a47db.webp?from=116350172",
                    "https://p26.douyinpic.com/aweme/100x100/aweme-avatar/tos-cn-i-0813_3733d4f3f0ef44c99edf7801729a47db.jpeg?from=116350172"
                ],
                "width": 720
            },
            "dmv_auto_show": false,
            "dsp_status": 10,
            "duration": 6,
            "end_time": 0,
            "external_song_info": [],
            "extra": "{\"review_unshelve_reason\":0,\"hotsoon_review_time\":-1,\"is_subsidy_exp\":false,\"extract_item_id\":7190042191169883427,\"has_edited\":0,\"douyin_beats_info\":{},\"is_red\":0,\"music_label_id\":null,\"dsp_switch\":0,\"beats\":{},\"schedule_search_time\":0,\"with_aed_model\":1,\"is_aed_music\":1,\"reviewed\":0,\"cover_colors\":null,\"music_tagging\":{\"Languages\":null,\"Moods\":null,\"Genres\":null,\"Themes\":null,\"AEDs\":null,\"SingingVersions\":null,\"Instruments\":null},\"aggregate_exempt_conf\":[]}",
            "id": 7190042182563220228,
            "id_str": "7190042182563220228",
            "is_audio_url_with_cookie": false,
            "is_commerce_music": false,
            "is_del_video": false,
            "is_matched_metadata": false,
            "is_original": false,
            "is_original_sound": true,
            "is_pgc": false,
            "is_restricted": false,
            "is_video_self_see": false,
            "luna_info": {
                "is_luna_user": false
            },
            "lyric_short_position": null,
            "mid": "7190042182563220228",
            "music_chart_ranks": null,
            "music_status": 1,
            "musician_user_infos": null,
            "mute_share": false,
            "offline_desc": "",
            "owner_handle": "g7m800",
            "owner_id": "4020229162931447",
            "owner_nickname": "KvKv",
            "pgc_music_type": 2,
            "play_url": {
                "height": 720,
                "uri": "https://sf6-cdn-tos.douyinstatic.com/obj/ies-music/7190042229984037644.mp3",
                "url_key": "7190042182563220228",
                "url_list": [
                    "https://sf6-cdn-tos.douyinstatic.com/obj/ies-music/7190042229984037644.mp3",
                    "https://sf86-cdn-tos.douyinstatic.com/obj/ies-music/7190042229984037644.mp3"
                ],
                "width": 720
            },
            "position": null,
            "prevent_download": false,
            "prevent_item_download_status": 0,
            "preview_end_time": 0,
            "preview_start_time": 0,
            "reason_type": 0,
            "redirect": false,
            "schema_url": "",
            "search_impr": {
                "entity_id": "7190042182563220228"
            },
            "sec_uid": "MS4wLjABAAAAEpTH6K-RrXpvt1sJ5GJ9EJ-76gRdvskpF8G3VXIvCoo0IEB-KcSP7ijVczEbKtaR",
            "shoot_duration": 6,
            "source_platform": 23,
            "start_time": 0,
            "status": 1,
            "tag_list": null,
            "title": "@KvKv创作的原声",
            "unshelve_countries": null,
            "user_count": 0,
            "video_duration": 6
        },
        "nickname_position": null,
        "origin_comment_ids": null,
        "origin_text_extra": [],
        "original_images": null,
        "packed_clips": null,
        "photo_search_entrance": {
            "ecom_type": 0
        },
        "position": null,
        "press_panel_info": "[{\"interactive\":[\"2_story\",\"2_friend\"]},{\"feedback\":[\"rr_feedback\",\"dislike\",\"ignore\",\"block\",\"unfollow\",\"sever\",\"dislike_collect\"]},{\"control\":[\"speed\",\"auth\",\"delete\",\"save\",\"collect\",\"reward\",\"bg_play\",\"duet\",\"together\"]}]",
        "preview_title": "晚安啦~马上就要过年啦~趁着弟弟还小去抢他红包啦#写真约拍 #随拍 #写真 #穿搭 #摄影 ~",
        "preview_video_status": 1,
        "promotions": [],
        "rate": 12,
        "ref_tts_id_list": null,
        "ref_voice_modify_id_list": null,
        "region": "CN",
        "relation_labels": null,
        "search_impr": {
            "entity_id": "7190042191169883427",
            "entity_type": "GENERAL"
        },
        "series_paid_info": {
            "item_price": 0,
            "series_paid_status": 0
        },
        "share_info": {
            "share_desc": "在抖音,记录美好生活",
            "share_desc_info": "#在抖音,记录美好生活#晚安啦~马上就要过年啦~趁着弟弟还小去抢他红包啦#写真约拍 #随拍 #写真 #穿搭 #摄影 ~",
            "share_link_desc": "5.87 DUy:/ 复制打开抖音,看看【KvKv的作品】晚安啦~马上就要过年啦~趁着弟弟还小去抢他红包啦#... %s",
            "share_url": "https://www.iesdouyin.com/share/video/7190042191169883427/?region=CN&mid=7190042182563220228&u_code=-1&did=MS4wLjABAAAANwkJuWIRFOzg5uCpDRpMj4OX-QryoDgn-yYlXQnRwQQ&iid=MS4wLjABAAAANwkJuWIRFOzg5uCpDRpMj4OX-QryoDgn-yYlXQnRwQQ&with_sec_did=1&titleType=title&from_ssr=1"
        },
        "share_url": "https://www.iesdouyin.com/share/video/7190042191169883427/?region=CN&mid=7190042182563220228&u_code=-1&did=MS4wLjABAAAANwkJuWIRFOzg5uCpDRpMj4OX-QryoDgn-yYlXQnRwQQ&iid=MS4wLjABAAAANwkJuWIRFOzg5uCpDRpMj4OX-QryoDgn-yYlXQnRwQQ&with_sec_did=1&titleType=title&from_ssr=1",
        "should_open_ad_report": false,
        "show_follow_button": {},
        "social_tag_list": null,
        "standard_bar_info_list": null,
        "statistics": {
            "admire_count": 0,
            "aweme_id": "7190042191169883427",
            "collect_count": 245,
            "comment_count": 37,
            "digg_count": 2298,
            "play_count": 0,
            "share_count": 207
        },
        "status": {
            "allow_share": true,
            "aweme_id": "7190042191169883427",
            "in_reviewing": false,
            "is_delete": false,
            "is_prohibited": false,
            "listen_video_status": 2,
            "part_see": 0,
            "private_status": 0,
            "review_result": {
                "review_status": 0
            }
        },
        "text_extra": [
            {
                "end": 29,
                "hashtag_id": "1737134653438979",
                "hashtag_name": "写真约拍",
                "is_commerce": false,
                "start": 24,
                "type": 1
            },
            {
                "end": 33,
                "hashtag_id": "1565837102636033",
                "hashtag_name": "随拍",
                "is_commerce": false,
                "start": 30,
                "type": 1
            },
            {
                "end": 37,
                "hashtag_id": "1573959798768717",
                "hashtag_name": "写真",
                "is_commerce": false,
                "start": 34,
                "type": 1
            },
            {
                "end": 41,
                "hashtag_id": "1561238083888129",
                "hashtag_name": "穿搭",
                "is_commerce": false,
                "start": 38,
                "type": 1
            },
            {
                "end": 45,
                "hashtag_id": "1563985121283073",
                "hashtag_name": "摄影",
                "is_commerce": false,
                "start": 42,
                "type": 1
            }
        ],
        "tts_id_list": null,
        "uniqid_position": null,
        "user_digged": 0,
        "user_recommend_status": 0,
        "video": {
            "big_thumbs": null,
            "bit_rate": [
                {
                    "FPS": 30,
                    "HDR_bit": "",
                    "HDR_type": "",
                    "bit_rate": 779925,
                    "gear_name": "adapt_lowest_720_1",
                    "is_bytevc1": 1,
                    "is_h265": 1,
                    "play_addr": {
                        "data_size": 652018,
                        "file_cs": "c:0-7181-bdf8|d:0-326008-b920,326009-652017-979e|a:v0d00fg10000cf42hqrc77u4gp1j3f6g",
                        "file_hash": "81b7556d3d31e961d71ee56230d53cbe",
                        "height": 1280,
                        "uri": "v0d00fg10000cf42hqrc77u4gp1j3f6g",
                        "url_key": "v0d00fg10000cf42hqrc77u4gp1j3f6g_bytevc1_720p_779925",
                        "url_list": [
                            "https://v9-cold1.douyinvod.com/4d2a019cae8d4d028475302ff0f7301d/64007e39/video/tos/cn/tos-cn-ve-15/oQNzN8uvhLBJUXfgxIvAMKBthREeB1A5IIAykx/?a=1128&ch=26&cr=3&dr=0&lr=all&cd=0%7C0%7C0%7C3&cv=1&br=761&bt=761&cs=2&ds=3&ft=GNvhKQVVywIiRZm8Zmo~xj7ScoApuJPe6vrKO230qmo0g3&mime_type=video_mp4&qs=15&rc=Nzw2NGc7ZWc6OTpkaGc5aEBpamltczc6ZnQ1aTMzNGkzM0BfLWMxLy5fNWExY2I0YjYxYSMzMC5kcjRvZTFgLS1kLWFzcw%3D%3D&l=2023030217450752D2C27E444198043BF9&btag=88000&cdn_n80=1",
                            "https://v6-cold.douyinvod.com/71b615465c8b768d9068246094fa4485/64007e39/video/tos/cn/tos-cn-ve-15/oQNzN8uvhLBJUXfgxIvAMKBthREeB1A5IIAykx/?a=1128&ch=26&cr=3&dr=0&lr=all&cd=0%7C0%7C0%7C3&cv=1&br=761&bt=761&cs=2&ds=3&ft=GNvhKQVVywIiRZm8Zmo~xj7ScoApuJPe6vrKO230qmo0g3&mime_type=video_mp4&qs=15&rc=Nzw2NGc7ZWc6OTpkaGc5aEBpamltczc6ZnQ1aTMzNGkzM0BfLWMxLy5fNWExY2I0YjYxYSMzMC5kcjRvZTFgLS1kLWFzcw%3D%3D&l=2023030217450752D2C27E444198043BF9&btag=88000",
                            "https://api.amemv.com/aweme/v1/play/?video_id=v0d00fg10000cf42hqrc77u4gp1j3f6g&line=0&file_id=4e96ed7eeaf746d78dbb182d41f309b4&sign=81b7556d3d31e961d71ee56230d53cbe&is_play_url=1&source=PackSourceEnum_AWEME_DETAIL",
                            "https://api5-normal-dsa.amemv.com/aweme/v1/play/?video_id=v0d00fg10000cf42hqrc77u4gp1j3f6g&line=1&file_id=4e96ed7eeaf746d78dbb182d41f309b4&sign=81b7556d3d31e961d71ee56230d53cbe&is_play_url=1&source=PackSourceEnum_AWEME_DETAIL"
                        ],
                        "width": 720
                    },
                    "quality_type": 15,
                    "video_extra": "{\"PktOffsetMap\":\"\"}"
                },
                {
                    "FPS": 30,
                    "HDR_bit": "",
                    "HDR_type": "",
                    "bit_rate": 595490,
                    "gear_name": "adapt_540_1",
                    "is_bytevc1": 1,
                    "is_h265": 1,
                    "play_addr": {
                        "data_size": 497830,
                        "file_cs": "c:0-7181-5c25|d:0-248914-3c39,248915-497829-e4cf|a:v0d00fg10000cf42hqrc77u4gp1j3f6g",
                        "file_hash": "40b1d92dba26d6a3f6a3a098f56b4e93",
                        "height": 1024,
                        "uri": "v0d00fg10000cf42hqrc77u4gp1j3f6g",
                        "url_key": "v0d00fg10000cf42hqrc77u4gp1j3f6g_bytevc1_540p_595490",
                        "url_list": [
                            "https://v11-cold1.douyinvod.com/f9e844e567c6112b1e6490c6457a4aab/64007e39/video/tos/cn/tos-cn-ve-15/oYbhMKxWIhEANU5BvI5ztANeR1AfHKBgmMNxUk/?a=1128&ch=26&cr=3&dr=0&lr=all&cd=0%7C0%7C0%7C3&cv=1&br=581&bt=581&cs=2&ds=6&ft=GNvhKQVVywIiRZm8Zmo~xj7ScoApuJPe6vrKO230qmo0g3&mime_type=video_mp4&qs=11&rc=ZjU1NzY7aGgzNmllaDxpaUBpamltczc6ZnQ1aTMzNGkzM0BeNS00LTQwNTIxLTIyXy1iYSMzMC5kcjRvZTFgLS1kLWFzcw%3D%3D&l=2023030217450752D2C27E444198043BF9&btag=88000",
                            "https://v99-coldx.douyinvod.com/9aba6ee54140e1464158a36528497b01/64007e39/video/tos/cn/tos-cn-ve-15/oYbhMKxWIhEANU5BvI5ztANeR1AfHKBgmMNxUk/?a=1128&ch=26&cr=3&dr=0&lr=all&cd=0%7C0%7C0%7C3&cv=1&br=581&bt=581&cs=2&ds=6&ft=GNvhKQVVywIiRZm8Zmo~xj7ScoApuJPe6vrKO230qmo0g3&mime_type=video_mp4&qs=11&rc=ZjU1NzY7aGgzNmllaDxpaUBpamltczc6ZnQ1aTMzNGkzM0BeNS00LTQwNTIxLTIyXy1iYSMzMC5kcjRvZTFgLS1kLWFzcw%3D%3D&l=2023030217450752D2C27E444198043BF9&btag=88000",
                            "https://api.amemv.com/aweme/v1/play/?video_id=v0d00fg10000cf42hqrc77u4gp1j3f6g&line=0&file_id=ef0fb95e5b0f43508e3e7803740282ac&sign=40b1d92dba26d6a3f6a3a098f56b4e93&is_play_url=1&source=PackSourceEnum_AWEME_DETAIL",
                            "https://api5-normal-dsa.amemv.com/aweme/v1/play/?video_id=v0d00fg10000cf42hqrc77u4gp1j3f6g&line=1&file_id=ef0fb95e5b0f43508e3e7803740282ac&sign=40b1d92dba26d6a3f6a3a098f56b4e93&is_play_url=1&source=PackSourceEnum_AWEME_DETAIL"
                        ],
                        "width": 576
                    },
                    "quality_type": 28,
                    "video_extra": "{\"PktOffsetMap\":\"\"}"
                },
                {
                    "FPS": 30,
                    "HDR_bit": "",
                    "HDR_type": "",
                    "bit_rate": 581816,
                    "gear_name": "adapt_540_0",
                    "is_bytevc1": 0,
                    "is_h265": 0,
                    "play_addr": {
                        "data_size": 489744,
                        "file_cs": "c:0-8729-99c8|d:0-244871-f76b,244872-489743-9bb0|a:v0d00fg10000cf42hqrc77u4gp1j3f6g",
                        "file_hash": "36d78394720160246b6ab28a49a01d43",
                        "height": 1024,
                        "uri": "v0d00fg10000cf42hqrc77u4gp1j3f6g",
                        "url_key": "v0d00fg10000cf42hqrc77u4gp1j3f6g_h264_540p_581816",
                        "url_list": [
                            "https://v99-coldx.douyinvod.com/82b7753011b856606300720d828d65d1/64007e39/video/tos/cn/tos-cn-ve-15c001-alinc2/oceA0bCrGgj9ne5QdzSDArBNWAy8hQLQj8jGEN/?a=1128&ch=26&cr=3&dr=0&lr=all&cd=0%7C0%7C0%7C3&cv=1&br=568&bt=568&cs=0&ds=6&ft=GNvhKQVVywIiRZm8Zmo~xj7ScoApuJPe6vrKO230qmo0g3&mime_type=video_mp4&qs=11&rc=OzxpNztmPDo8NDg2Nzw6O0Bpamltczc6ZnQ1aTMzNGkzM0AzNF81Y181XzYxX2JiNDE1YSMzMC5kcjRvZTFgLS1kLWFzcw%3D%3D&l=2023030217450752D2C27E444198043BF9&btag=88000",
                            "https://v13-a.douyinvod.com/fd08f2b7f9347c4ea1a4b1dd4ace2c09/64007e39/video/tos/cn/tos-cn-ve-15c001-alinc2/oceA0bCrGgj9ne5QdzSDArBNWAy8hQLQj8jGEN/?a=1128&ch=26&cr=3&dr=0&lr=all&cd=0%7C0%7C0%7C3&cv=1&br=568&bt=568&cs=0&ds=6&ft=GNvhKQVVywIiRZm8Zmo~xj7ScoApuJPe6vrKO230qmo0g3&mime_type=video_mp4&qs=11&rc=OzxpNztmPDo8NDg2Nzw6O0Bpamltczc6ZnQ1aTMzNGkzM0AzNF81Y181XzYxX2JiNDE1YSMzMC5kcjRvZTFgLS1kLWFzcw%3D%3D&l=2023030217450752D2C27E444198043BF9&btag=88000",
                            "https://api.amemv.com/aweme/v1/play/?video_id=v0d00fg10000cf42hqrc77u4gp1j3f6g&line=0&file_id=884779e4e3b54199b789bcf884bf7968&sign=36d78394720160246b6ab28a49a01d43&is_play_url=1&source=PackSourceEnum_AWEME_DETAIL",
                            "https://api5-normal-dsa.amemv.com/aweme/v1/play/?video_id=v0d00fg10000cf42hqrc77u4gp1j3f6g&line=1&file_id=884779e4e3b54199b789bcf884bf7968&sign=36d78394720160246b6ab28a49a01d43&is_play_url=1&source=PackSourceEnum_AWEME_DETAIL"
                        ],
                        "width": 576
                    },
                    "quality_type": 28,
                    "video_extra": "{\"PktOffsetMap\":\"\"}"
                }
            ],
            "cover": {
                "height": 720,
                "uri": "tos-cn-p-0015/3182961f695340b28512e6b2cd623c4c_1674062175",
                "url_list": [
                    "https://p3-sign.douyinpic.com/tos-cn-p-0015/3182961f695340b28512e6b2cd623c4c_1674062175~c5_300x400.webp?x-expires=1678957200&x-signature=9kC7yjUFjMm%2FVusUDfdoZR8HlCY%3D&from=3213915784_large&s=PackSourceEnum_AWEME_DETAIL&se=false&sc=cover&l=2023030217450752D2C27E444198043BF9",
                    "https://p9-sign.douyinpic.com/tos-cn-p-0015/3182961f695340b28512e6b2cd623c4c_1674062175~c5_300x400.webp?x-expires=1678957200&x-signature=HqeXLLPXmOzG2CjBdMbHrO5kGRo%3D&from=3213915784_large&s=PackSourceEnum_AWEME_DETAIL&se=false&sc=cover&l=2023030217450752D2C27E444198043BF9",
                    "https://p26-sign.douyinpic.com/tos-cn-p-0015/3182961f695340b28512e6b2cd623c4c_1674062175~c5_300x400.webp?x-expires=1678957200&x-signature=UiIYudl0dsEktPZlKm8Maxy53W8%3D&from=3213915784_large&s=PackSourceEnum_AWEME_DETAIL&se=false&sc=cover&l=2023030217450752D2C27E444198043BF9",
                    "https://p3-sign.douyinpic.com/tos-cn-p-0015/3182961f695340b28512e6b2cd623c4c_1674062175~c5_300x400.jpeg?x-expires=1678957200&x-signature=XgKKmx%2BSBAitumYSOEagLeawQZ0%3D&from=3213915784_large&s=PackSourceEnum_AWEME_DETAIL&se=false&sc=cover&l=2023030217450752D2C27E444198043BF9"
                ],
                "width": 720
            },
            "cover_original_scale": {
                "height": 720,
                "uri": "tos-cn-p-0015/3182961f695340b28512e6b2cd623c4c_1674062175",
                "url_list": [
                    "https://p3-sign.douyinpic.com/tos-cn-p-0015/3182961f695340b28512e6b2cd623c4c_1674062175~tplv-dy-360p.webp?x-expires=1678957200&x-signature=WotA9%2Bmm6f39OQuB4EWFGB6DDTM%3D&from=3213915784&se=false&biz_tag=feed_cover&l=2023030217450752D2C27E444198043BF9",
                    "https://p9-sign.douyinpic.com/tos-cn-p-0015/3182961f695340b28512e6b2cd623c4c_1674062175~tplv-dy-360p.webp?x-expires=1678957200&x-signature=TYmUc0RaEHlEGd%2FlZKrT2Bdj7RU%3D&from=3213915784&se=false&biz_tag=feed_cover&l=2023030217450752D2C27E444198043BF9",
                    "https://p26-sign.douyinpic.com/tos-cn-p-0015/3182961f695340b28512e6b2cd623c4c_1674062175~tplv-dy-360p.webp?x-expires=1678957200&x-signature=pQvEyXEU0QZM5HHMl0nOtFP%2FXQM%3D&from=3213915784&se=false&biz_tag=feed_cover&l=2023030217450752D2C27E444198043BF9",
                    "https://p3-sign.douyinpic.com/tos-cn-p-0015/3182961f695340b28512e6b2cd623c4c_1674062175~tplv-dy-360p.jpeg?x-expires=1678957200&x-signature=FtWXD2OwKiiQY3YCGpTMZAculpQ%3D&from=3213915784&se=false&biz_tag=feed_cover&l=2023030217450752D2C27E444198043BF9"
                ],
                "width": 720
            },
            "duration": 6734,
            "dynamic_cover": {
                "height": 720,
                "uri": "tos-cn-p-0015/6452609beaee43e2b65b3e44d6e367df_1674062177",
                "url_list": [
                    "https://p9-sign.douyinpic.com/obj/tos-cn-p-0015/6452609beaee43e2b65b3e44d6e367df_1674062177?x-expires=1678957200&x-signature=Xt2EJiNJienqEbX11Bv01ygxMqs%3D&from=3213915784_large",
                    "https://p3-sign.douyinpic.com/obj/tos-cn-p-0015/6452609beaee43e2b65b3e44d6e367df_1674062177?x-expires=1678957200&x-signature=L%2FhMH07GmoKVpDMorm1YCn%2Bhm0k%3D&from=3213915784_large",
                    "https://p26-sign.douyinpic.com/obj/tos-cn-p-0015/6452609beaee43e2b65b3e44d6e367df_1674062177?x-expires=1678957200&x-signature=wxa6FRnwdLd5OdWaUObEB%2FA3Mfs%3D&from=3213915784_large"
                ],
                "width": 720
            },
            "height": 1920,
            "is_h265": 0,
            "is_source_HDR": 0,
            "meta": "{\"bright_ratio_mean\":\"0.0907\",\"brightness_mean\":\"86.2187\",\"diff_overexposure_ratio\":\"0.0007\",\"fullscreen_max_crop\":\"{\\\"maxcrop_left\\\": 0.032, \\\"maxcrop_right\\\": 0.019, \\\"maxcrop_top\\\": 0.114, \\\"version\\\": \\\"v1.0\\\"}\",\"loudness\":\"-8.7\",\"overexposure_ratio_mean\":\"0.0012\",\"peak\":\"1\",\"qprf\":\"0.9174188375473022\",\"sr_score\":\"0.000\",\"std_brightness\":\"33.3143\",\"title_info\":\"{\\\"ratio_br_l\\\": [0.0, 0.0, 0.0, 0.0, 0.0, 0.0], \\\"ratio_edge_l\\\": [0.0, 0.08, 0.12, 0.16, 0.15, 0.19], \\\"progress_bar\\\": [0.0, 0.0, 0.0], \\\"version\\\": \\\"v1.0\\\"}\"}",
            "origin_cover": {
                "height": 720,
                "uri": "tos-cn-p-0015/112a617106904d9aa5d17c95e7ee63be_1674062177",
                "url_list": [
                    "https://p26-sign.douyinpic.com/tos-cn-p-0015/112a617106904d9aa5d17c95e7ee63be_1674062177~tplv-dy-360p.webp?x-expires=1678957200&x-signature=Q0js4AWPzErCbtsUuZ5JO6zqJnM%3D&from=3213915784&se=false&biz_tag=feed_cover&l=2023030217450752D2C27E444198043BF9",
                    "https://p9-sign.douyinpic.com/tos-cn-p-0015/112a617106904d9aa5d17c95e7ee63be_1674062177~tplv-dy-360p.webp?x-expires=1678957200&x-signature=2yeJ%2F7eEFPxf1Ki22LYfDJqaxLs%3D&from=3213915784&se=false&biz_tag=feed_cover&l=2023030217450752D2C27E444198043BF9",
                    "https://p3-sign.douyinpic.com/tos-cn-p-0015/112a617106904d9aa5d17c95e7ee63be_1674062177~tplv-dy-360p.webp?x-expires=1678957200&x-signature=UhLKzGeKuL1LsITRR1JGFpls0fo%3D&from=3213915784&se=false&biz_tag=feed_cover&l=2023030217450752D2C27E444198043BF9",
                    "https://p26-sign.douyinpic.com/tos-cn-p-0015/112a617106904d9aa5d17c95e7ee63be_1674062177~tplv-dy-360p.jpeg?x-expires=1678957200&x-signature=ic5frT%2BtCmzGMiGX8FudAqSDl8I%3D&from=3213915784&se=false&biz_tag=feed_cover&l=2023030217450752D2C27E444198043BF9"
                ],
                "width": 720
            },
            "play_addr": {
                "data_size": 572879,
                "file_cs": "c:0-8789-6e46|d:0-286438-c2aa,286439-572878-50f5|a:v0d00fg10000cf42hqrc77u4gp1j3f6g",
                "file_hash": "fdee3d4c7906ae5026ccc0405c008a9c",
                "height": 1024,
                "uri": "v0d00fg10000cf42hqrc77u4gp1j3f6g",
                "url_key": "v0d00fg10000cf42hqrc77u4gp1j3f6g_h264_540p_685261",
                "url_list": [
                    "https://v99-coldx.douyinvod.com/2cab3d951cd244de39994a440c5d8bb2/64007e39/video/tos/cn/tos-cn-ve-15c001-alinc2/oY8QrGjDzQ9ziQuh8B8jAUeng0Ne9AWxbCyAGS/?a=1128&ch=26&cr=3&dr=0&lr=all&cd=0%7C0%7C0%7C3&cv=1&br=669&bt=669&cs=0&ds=6&ft=GNvhKQVVywIiRZm8Zmo~xj7ScoApuJPe6vrKO230qmo0g3&mime_type=video_mp4&qs=0&rc=ZDdmZGg5aGk8ZjllZTkzOUBpamltczc6ZnQ1aTMzNGkzM0BiLjYzYy0xNl4xLy1hNmFiYSMzMC5kcjRvZTFgLS1kLWFzcw%3D%3D&l=2023030217450752D2C27E444198043BF9&btag=88000",
                    "https://v5-coldy.douyinvod.com/643da0c029e372c980666bb146aaa9b0/64007e39/video/tos/cn/tos-cn-ve-15c001-alinc2/oY8QrGjDzQ9ziQuh8B8jAUeng0Ne9AWxbCyAGS/?a=1128&ch=26&cr=3&dr=0&lr=all&cd=0%7C0%7C0%7C3&cv=1&br=669&bt=669&cs=0&ds=6&ft=GNvhKQVVywIiRZm8Zmo~xj7ScoApuJPe6vrKO230qmo0g3&mime_type=video_mp4&qs=0&rc=ZDdmZGg5aGk8ZjllZTkzOUBpamltczc6ZnQ1aTMzNGkzM0BiLjYzYy0xNl4xLy1hNmFiYSMzMC5kcjRvZTFgLS1kLWFzcw%3D%3D&l=2023030217450752D2C27E444198043BF9&btag=88000",
                    "https://api.amemv.com/aweme/v1/play/?video_id=v0d00fg10000cf42hqrc77u4gp1j3f6g&line=0&file_id=e6d096db0b264ca99f4e06fe6a9c14ea&sign=fdee3d4c7906ae5026ccc0405c008a9c&is_play_url=1&source=PackSourceEnum_AWEME_DETAIL",
                    "https://api5-normal-dsa.amemv.com/aweme/v1/play/?video_id=v0d00fg10000cf42hqrc77u4gp1j3f6g&line=1&file_id=e6d096db0b264ca99f4e06fe6a9c14ea&sign=fdee3d4c7906ae5026ccc0405c008a9c&is_play_url=1&source=PackSourceEnum_AWEME_DETAIL"
                ],
                "width": 576
            },
            "play_addr_265": {
                "data_size": 497830,
                "file_cs": "c:0-7181-5c25|d:0-248914-3c39,248915-497829-e4cf|a:v0d00fg10000cf42hqrc77u4gp1j3f6g",
                "file_hash": "40b1d92dba26d6a3f6a3a098f56b4e93",
                "height": 1024,
                "uri": "v0d00fg10000cf42hqrc77u4gp1j3f6g",
                "url_key": "v0d00fg10000cf42hqrc77u4gp1j3f6g_bytevc1_540p_595490",
                "url_list": [
                    "https://v11-cold1.douyinvod.com/f9e844e567c6112b1e6490c6457a4aab/64007e39/video/tos/cn/tos-cn-ve-15/oYbhMKxWIhEANU5BvI5ztANeR1AfHKBgmMNxUk/?a=1128&ch=26&cr=3&dr=0&lr=all&cd=0%7C0%7C0%7C3&cv=1&br=581&bt=581&cs=2&ds=6&ft=GNvhKQVVywIiRZm8Zmo~xj7ScoApuJPe6vrKO230qmo0g3&mime_type=video_mp4&qs=11&rc=ZjU1NzY7aGgzNmllaDxpaUBpamltczc6ZnQ1aTMzNGkzM0BeNS00LTQwNTIxLTIyXy1iYSMzMC5kcjRvZTFgLS1kLWFzcw%3D%3D&l=2023030217450752D2C27E444198043BF9&btag=88000",
                    "https://v99-coldx.douyinvod.com/9aba6ee54140e1464158a36528497b01/64007e39/video/tos/cn/tos-cn-ve-15/oYbhMKxWIhEANU5BvI5ztANeR1AfHKBgmMNxUk/?a=1128&ch=26&cr=3&dr=0&lr=all&cd=0%7C0%7C0%7C3&cv=1&br=581&bt=581&cs=2&ds=6&ft=GNvhKQVVywIiRZm8Zmo~xj7ScoApuJPe6vrKO230qmo0g3&mime_type=video_mp4&qs=11&rc=ZjU1NzY7aGgzNmllaDxpaUBpamltczc6ZnQ1aTMzNGkzM0BeNS00LTQwNTIxLTIyXy1iYSMzMC5kcjRvZTFgLS1kLWFzcw%3D%3D&l=2023030217450752D2C27E444198043BF9&btag=88000",
                    "https://api.amemv.com/aweme/v1/play/?video_id=v0d00fg10000cf42hqrc77u4gp1j3f6g&line=0&file_id=ef0fb95e5b0f43508e3e7803740282ac&sign=40b1d92dba26d6a3f6a3a098f56b4e93&is_play_url=1&source=PackSourceEnum_AWEME_DETAIL",
                    "https://api5-normal-dsa.amemv.com/aweme/v1/play/?video_id=v0d00fg10000cf42hqrc77u4gp1j3f6g&line=1&file_id=ef0fb95e5b0f43508e3e7803740282ac&sign=40b1d92dba26d6a3f6a3a098f56b4e93&is_play_url=1&source=PackSourceEnum_AWEME_DETAIL"
                ],
                "width": 576
            },
            "play_addr_h264": {
                "data_size": 572879,
                "file_cs": "c:0-8789-6e46|d:0-286438-c2aa,286439-572878-50f5|a:v0d00fg10000cf42hqrc77u4gp1j3f6g",
                "file_hash": "fdee3d4c7906ae5026ccc0405c008a9c",
                "height": 1024,
                "uri": "v0d00fg10000cf42hqrc77u4gp1j3f6g",
                "url_key": "v0d00fg10000cf42hqrc77u4gp1j3f6g_h264_540p_685261",
                "url_list": [
                    "https://v99-coldx.douyinvod.com/2cab3d951cd244de39994a440c5d8bb2/64007e39/video/tos/cn/tos-cn-ve-15c001-alinc2/oY8QrGjDzQ9ziQuh8B8jAUeng0Ne9AWxbCyAGS/?a=1128&ch=26&cr=3&dr=0&lr=all&cd=0%7C0%7C0%7C3&cv=1&br=669&bt=669&cs=0&ds=6&ft=GNvhKQVVywIiRZm8Zmo~xj7ScoApuJPe6vrKO230qmo0g3&mime_type=video_mp4&qs=0&rc=ZDdmZGg5aGk8ZjllZTkzOUBpamltczc6ZnQ1aTMzNGkzM0BiLjYzYy0xNl4xLy1hNmFiYSMzMC5kcjRvZTFgLS1kLWFzcw%3D%3D&l=2023030217450752D2C27E444198043BF9&btag=88000",
                    "https://v5-coldy.douyinvod.com/643da0c029e372c980666bb146aaa9b0/64007e39/video/tos/cn/tos-cn-ve-15c001-alinc2/oY8QrGjDzQ9ziQuh8B8jAUeng0Ne9AWxbCyAGS/?a=1128&ch=26&cr=3&dr=0&lr=all&cd=0%7C0%7C0%7C3&cv=1&br=669&bt=669&cs=0&ds=6&ft=GNvhKQVVywIiRZm8Zmo~xj7ScoApuJPe6vrKO230qmo0g3&mime_type=video_mp4&qs=0&rc=ZDdmZGg5aGk8ZjllZTkzOUBpamltczc6ZnQ1aTMzNGkzM0BiLjYzYy0xNl4xLy1hNmFiYSMzMC5kcjRvZTFgLS1kLWFzcw%3D%3D&l=2023030217450752D2C27E444198043BF9&btag=88000",
                    "https://api.amemv.com/aweme/v1/play/?video_id=v0d00fg10000cf42hqrc77u4gp1j3f6g&line=0&file_id=e6d096db0b264ca99f4e06fe6a9c14ea&sign=fdee3d4c7906ae5026ccc0405c008a9c&is_play_url=1&source=PackSourceEnum_AWEME_DETAIL",
                    "https://api5-normal-dsa.amemv.com/aweme/v1/play/?video_id=v0d00fg10000cf42hqrc77u4gp1j3f6g&line=1&file_id=e6d096db0b264ca99f4e06fe6a9c14ea&sign=fdee3d4c7906ae5026ccc0405c008a9c&is_play_url=1&source=PackSourceEnum_AWEME_DETAIL"
                ],
                "width": 576
            },
            "ratio": "540p",
            "width": 1080
        },
        "video_labels": null,
        "video_tag": [
            {
                "level": 1,
                "tag_id": 2029,
                "tag_name": "随拍"
            },
            {
                "level": 2,
                "tag_id": 2029001,
                "tag_name": "人物随拍"
            },
            {
                "level": 3,
                "tag_id": 2029001003,
                "tag_name": "人物图片轮播"
            }
        ],
        "video_text": [],
        "voice_modify_id_list": null
    },
    "log_pb": {
        "impr_id": "2023030217450752D2C27E444198043BF9"
    },
    "status_code": 0
}

PHP接口实现

我们这里其实发现大体逻辑是没有改变的,因此实现起来只需要先请求获取X-Bogus,从返回结果的param中拿到新的url携带上述请求头进行请求就可以了,核心代码如下

    public function douyin($url) {
        $headers = get_headers($url, 1);
        $redirect_url = $headers['Location'];
        if ($redirect_url) {
            $url = $redirect_url;
        }
        
        preg_match('/(\d+)/', $url, $matches);
        $num = $matches[1];
        $curl = curl_init();
        curl_setopt_array($curl, array(
           CURLOPT_URL => 'https://tiktok.iculture.cc/X-Bogus',
           CURLOPT_RETURNTRANSFER => true,
           CURLOPT_ENCODING => '',
           CURLOPT_MAXREDIRS => 10,
           CURLOPT_TIMEOUT => 0,
           CURLOPT_FOLLOWLOCATION => true,
           CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
           CURLOPT_SSL_VERIFYPEER => false,
           CURLOPT_CUSTOMREQUEST => 'POST',
           CURLOPT_POSTFIELDS =>'{
            "url":"https://www.douyin.com/aweme/v1/web/aweme/detail/?aweme_id='.$num.'&aid=1128&version_name=23.5.0&device_platform=android&os_version=2333",
            "user_agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/109.0.0.0 Safari/537.36"
        }',
           CURLOPT_HTTPHEADER => array(
              'User-Agent: FancyPig',
              'Content-Type: application/json',
              'Accept: */*',
              'Host: tiktok.iculture.cc',
              'Connection: keep-alive'
           ),
        ));
        
        $json_array= json_decode(curl_exec($curl));
        curl_close($curl);
        $new_url = $json_array->param;
        $msToken = substr(str_shuffle('0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'), 0, 107);
        
        $curl = curl_init();
        curl_setopt_array($curl, array(
           CURLOPT_URL => $new_url,
           CURLOPT_RETURNTRANSFER => true,
           CURLOPT_ENCODING => '',
           CURLOPT_MAXREDIRS => 10,
           CURLOPT_TIMEOUT => 0,
           CURLOPT_FOLLOWLOCATION => true,
           CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
           CURLOPT_SSL_VERIFYPEER => false,
           CURLOPT_CUSTOMREQUEST => 'GET',
           CURLOPT_HTTPHEADER => array(
              'User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/109.0.0.0 Safari/537.36',
              'Referer: https://www.douyin.com/',
              'Cookie: msToken='.$msToken.';odin_tt=324fb4ea4a89c0c05827e18a1ed9cf9bf8a17f7705fcc793fec935b637867e2a5a9b8168c885554d029919117a18ba69; ttwid=1%7CWBuxH_bhbuTENNtACXoesI5QHV2Dt9-vkMGVHSRRbgY%7C1677118712%7C1d87ba1ea2cdf05d80204aea2e1036451dae638e7765b8a4d59d87fa05dd39ff; bd_ticket_guard_client_data=eyJiZC10aWNrZXQtZ3VhcmQtdmVyc2lvbiI6MiwiYmQtdGlja2V0LWd1YXJkLWNsaWVudC1jc3IiOiItLS0tLUJFR0lOIENFUlRJRklDQVRFIFJFUVVFU1QtLS0tLVxyXG5NSUlCRFRDQnRRSUJBREFuTVFzd0NRWURWUVFHRXdKRFRqRVlNQllHQTFVRUF3d1BZbVJmZEdsamEyVjBYMmQxXHJcbllYSmtNRmt3RXdZSEtvWkl6ajBDQVFZSUtvWkl6ajBEQVFjRFFnQUVKUDZzbjNLRlFBNUROSEcyK2F4bXAwNG5cclxud1hBSTZDU1IyZW1sVUE5QTZ4aGQzbVlPUlI4NVRLZ2tXd1FJSmp3Nyszdnc0Z2NNRG5iOTRoS3MvSjFJc3FBc1xyXG5NQ29HQ1NxR1NJYjNEUUVKRGpFZE1Cc3dHUVlEVlIwUkJCSXdFSUlPZDNkM0xtUnZkWGxwYmk1amIyMHdDZ1lJXHJcbktvWkl6ajBFQXdJRFJ3QXdSQUlnVmJkWTI0c0RYS0c0S2h3WlBmOHpxVDRBU0ROamNUb2FFRi9MQnd2QS8xSUNcclxuSURiVmZCUk1PQVB5cWJkcytld1QwSDZqdDg1czZZTVNVZEo5Z2dmOWlmeTBcclxuLS0tLS1FTkQgQ0VSVElGSUNBVEUgUkVRVUVTVC0tLS0tXHJcbiJ9',
              'Accept: */*',
              'Host: www.douyin.com',
              'Connection: keep-alive'
           ),
        ));
        $arr = json_decode(curl_exec($curl), true);
        curl_close($curl);
        if ($arr['status_code']==0) {
            $arr = ['code' => 200, 
            'msg' => '解析成功', 
                'author' => $arr['aweme_detail']['author']['nickname'], 
                'uid' => $arr['aweme_detail']['author']['unique_id'], 
                'avatar' => $arr['aweme_detail']['music']['avatar_large']['url_list'][0],
                'like' => $arr['aweme_detail']['statistics']['digg_count'], 
                'time' => $arr['aweme_detail']["create_time"], 
                'title' => $arr['aweme_detail']['desc'], 
                'cover' => $arr['aweme_detail']['video']['origin_cover']['url_list'][0], 
                'url' => $arr['aweme_detail']['video']['play_addr']['url_list'][0],
                'musicurl' => $arr['aweme_detail']['music']['play_url']['url_list'][0], 
                'music' => [
                    'author' => $arr['aweme_detail']['music']['author'], 
                    'avatar' => $arr['aweme_detail']['music']['cover_large']['url_list'][0], 
                    'url' => $arr['aweme_detail']['music']['play_url']['url_list'][0], 
                ]
            ];
            return $arr;
        }
    }

PHP解析代码打包

文件路径

  • src文件夹
    • video_spider.php
  • index.php

video_spider.php

<?php

namespace Video_spider;

class Video {
    public function pipixia($url) {
        $loc = get_headers($url, true) ['Location'];
        preg_match('/item\/(.*)\?/', $loc, $id);
        $arr = json_decode($this->curl('https://is.snssdk.com/bds/cell/detail/?cell_type=1&aid=1319&app_name=super&cell_id=' . $id[1]), true);
        $video_url = $arr['data']['data']['item']['origin_video_download']['url_list'][0]['url'];
        if ($video_url) {
            $arr = [
                'code' => 200, 
                    'author' => $arr['data']['data']['item']['author']['name'], 
                    'avatar' => $arr['data']['data']['item']['author']['avatar']['download_list'][0]['url'], 
                    'time' => $arr['data']['data']['display_time'], 
                    'title' => $arr['data']['data']['item']['content'], 
                    'cover' => $arr['data']['data']['item']['cover']['url_list'][0]['url'], 
                    'url' => $video_url
                ];
            return $arr;
        }
    }
    
    public function douyin($url) {
        $headers = get_headers($url, 1);
        $redirect_url = $headers['Location'];
        if ($redirect_url) {
            $url = $redirect_url;
        }
        
        preg_match('/(\d+)/', $url, $matches);
        $num = $matches[1];
        $curl = curl_init();
        curl_setopt_array($curl, array(
           CURLOPT_URL => 'https://tiktok.iculture.cc/X-Bogus',
           CURLOPT_RETURNTRANSFER => true,
           CURLOPT_ENCODING => '',
           CURLOPT_MAXREDIRS => 10,
           CURLOPT_TIMEOUT => 0,
           CURLOPT_FOLLOWLOCATION => true,
           CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
           CURLOPT_SSL_VERIFYPEER => false,
           CURLOPT_CUSTOMREQUEST => 'POST',
           CURLOPT_POSTFIELDS =>'{
            "url":"https://www.douyin.com/aweme/v1/web/aweme/detail/?aweme_id='.$num.'&aid=1128&version_name=23.5.0&device_platform=android&os_version=2333",
            "user_agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/109.0.0.0 Safari/537.36"
        }',
           CURLOPT_HTTPHEADER => array(
              'User-Agent: FancyPig',
              'Content-Type: application/json',
              'Accept: */*',
              'Host: tiktok.iculture.cc',
              'Connection: keep-alive'
           ),
        ));
        
        $json_array= json_decode(curl_exec($curl));
        curl_close($curl);
        $new_url = $json_array->param;
        $msToken = substr(str_shuffle('0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'), 0, 107);
        
        $curl = curl_init();
        curl_setopt_array($curl, array(
           CURLOPT_URL => $new_url,
           CURLOPT_RETURNTRANSFER => true,
           CURLOPT_ENCODING => '',
           CURLOPT_MAXREDIRS => 10,
           CURLOPT_TIMEOUT => 0,
           CURLOPT_FOLLOWLOCATION => true,
           CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
           CURLOPT_SSL_VERIFYPEER => false,
           CURLOPT_CUSTOMREQUEST => 'GET',
           CURLOPT_HTTPHEADER => array(
              'User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/109.0.0.0 Safari/537.36',
              'Referer: https://www.douyin.com/',
              'Cookie: msToken='.$msToken.';odin_tt=324fb4ea4a89c0c05827e18a1ed9cf9bf8a17f7705fcc793fec935b637867e2a5a9b8168c885554d029919117a18ba69; ttwid=1%7CWBuxH_bhbuTENNtACXoesI5QHV2Dt9-vkMGVHSRRbgY%7C1677118712%7C1d87ba1ea2cdf05d80204aea2e1036451dae638e7765b8a4d59d87fa05dd39ff; bd_ticket_guard_client_data=eyJiZC10aWNrZXQtZ3VhcmQtdmVyc2lvbiI6MiwiYmQtdGlja2V0LWd1YXJkLWNsaWVudC1jc3IiOiItLS0tLUJFR0lOIENFUlRJRklDQVRFIFJFUVVFU1QtLS0tLVxyXG5NSUlCRFRDQnRRSUJBREFuTVFzd0NRWURWUVFHRXdKRFRqRVlNQllHQTFVRUF3d1BZbVJmZEdsamEyVjBYMmQxXHJcbllYSmtNRmt3RXdZSEtvWkl6ajBDQVFZSUtvWkl6ajBEQVFjRFFnQUVKUDZzbjNLRlFBNUROSEcyK2F4bXAwNG5cclxud1hBSTZDU1IyZW1sVUE5QTZ4aGQzbVlPUlI4NVRLZ2tXd1FJSmp3Nyszdnc0Z2NNRG5iOTRoS3MvSjFJc3FBc1xyXG5NQ29HQ1NxR1NJYjNEUUVKRGpFZE1Cc3dHUVlEVlIwUkJCSXdFSUlPZDNkM0xtUnZkWGxwYmk1amIyMHdDZ1lJXHJcbktvWkl6ajBFQXdJRFJ3QXdSQUlnVmJkWTI0c0RYS0c0S2h3WlBmOHpxVDRBU0ROamNUb2FFRi9MQnd2QS8xSUNcclxuSURiVmZCUk1PQVB5cWJkcytld1QwSDZqdDg1czZZTVNVZEo5Z2dmOWlmeTBcclxuLS0tLS1FTkQgQ0VSVElGSUNBVEUgUkVRVUVTVC0tLS0tXHJcbiJ9',
              'Accept: */*',
              'Host: www.douyin.com',
              'Connection: keep-alive'
           ),
        ));
        $arr = json_decode(curl_exec($curl), true);
        curl_close($curl);
        if ($arr['status_code']==0) {
            $arr = ['code' => 200, 
            'msg' => '解析成功', 
                'author' => $arr['aweme_detail']['author']['nickname'], 
                'uid' => $arr['aweme_detail']['author']['unique_id'], 
                'avatar' => $arr['aweme_detail']['music']['avatar_large']['url_list'][0],
                'like' => $arr['aweme_detail']['statistics']['digg_count'], 
                'time' => $arr['aweme_detail']["create_time"], 
                'title' => $arr['aweme_detail']['desc'], 
                'cover' => $arr['aweme_detail']['video']['origin_cover']['url_list'][0], 
                'url' => $arr['aweme_detail']['video']['play_addr']['url_list'][0],
                'musicurl' => $arr['aweme_detail']['music']['play_url']['url_list'][0], 
                'music' => [
                    'author' => $arr['aweme_detail']['music']['author'], 
                    'avatar' => $arr['aweme_detail']['music']['cover_large']['url_list'][0], 
                    'url' => $arr['aweme_detail']['music']['play_url']['url_list'][0], 
                ]
            ];
            return $arr;
        }
    }

    public function huoshan($url) {
        $loc = get_headers($url, true) ['location'];
        preg_match('/item_id=(.*)&tag/', $loc, $id);
        $arr = json_decode($this->curl('https://share.huoshan.com/api/item/info?item_id=' . $id[1]), true);
        $url = $arr['data']['item_info']['url'];
        preg_match('/video_id=(.*)&line/', $url, $id);
        if ($id) {
            $arr = [
                'code' => 200, 
                'msg' => '解析成功', 
                'cover' => $arr["data"]["item_info"]["cover"], 
                'url' => 'https://api-hl.huoshan.com/hotsoon/item/video/_playback/?video_id=' . $id[1]
            ];
            return $arr;
        }
    }

    public function weishi($url) {
        preg_match('/feed\/(.*)\b/', $url, $id);
        if (strpos($url, 'h5.weishi') != false) {
            $arr = json_decode($this->curl('https://h5.weishi.qq.com/webapp/json/weishi/WSH5GetPlayPage?feedid=' . $id[1]), true);
        } else {
            $arr = json_decode($this->curl('https://h5.weishi.qq.com/webapp/json/weishi/WSH5GetPlayPage?feedid=' . $url), true);
        }
        $video_url = $arr['data']['feeds'][0]['video_url'];
        if ($video_url) {
            $arr = [
                'code' => 200, 
                'msg' => '解析成功', 
                    'author' => $arr['data']['feeds'][0]['poster']['nick'], 
                    'avatar' => $arr['data']['feeds'][0]['poster']['avatar'], 
                    'time' => $arr['data']['feeds'][0]['poster']['createtime'], 
                    'title' => $arr['data']['feeds'][0]['feed_desc_withat'], 
                    'cover' => $arr['data']['feeds'][0]['images'][0]['url'], 
                    'url' => $video_url
            ];
            return $arr;
        }
    }

    public function weibo($url) {
        if (strpos($url, 'show?fid=') != false) {
            preg_match('/fid=(.*)/', $url, $id);
            $arr = json_decode($this->weibo_curl($id[1]), true);
        } else {
            preg_match('/\d+\:\d+/', $url, $id);
            $arr = json_decode($this->weibo_curl($id[0]), true);
        }
        if ($arr) {
            $one = key($arr['data']['Component_Play_Playinfo']['urls']);
            $video_url = $arr['data']['Component_Play_Playinfo']['urls'][$one];
            $arr = [
                'code' => 200, 
                'msg' => '解析成功', 
                    'author' => $arr['data']['Component_Play_Playinfo']['author'], 
                    'avatar' => $arr['data']['Component_Play_Playinfo']['avatar'], 
                    'time' => $arr['data']['Component_Play_Playinfo']['real_date'], 
                    'title' => $arr['data']['Component_Play_Playinfo']['title'], 
                    'cover' => $arr['data']['Component_Play_Playinfo']['cover_image'], 
                    'url' => $video_url
                ];
            return $arr;
        }
    }

    public function lvzhou($url) {
        $text = $this->curl($url);
        preg_match('/<div class=\"status-title\">(.*)<\/div>/', $text, $video_title);
        preg_match('/<div style=\"background-image:url\((.*)\)/', $text, $video_cover);
        preg_match('/<video src=\"([^\"]*)\"/', $text, $video_url);
        preg_match('/<div class=\"nickname\">(.*)<\/div>/', $text, $video_author);
        preg_match('/<a class=\"avatar\"><img src=\"(.*)\?/', $text, $video_author_img);
        preg_match('/已获得(.*)条点赞<\/div>/', $text, $video_like);
        if ($video_url[1]) {
            $arr = [
                'code' => 200, 
                'msg' => '解析成功', 
                    'author' => $video_author[1], 
                    'avatar' => str_replace('1080.180', '1080.680', $video_author_img) [1], 
                    'like' => $video_like[1], 
                    'title' => $video_title[1], 
                    'cover' => $video_cover[1], 
                    'url' => $video_url[1], 
                ];
            return $arr;
        }
    }

    public function zuiyou($url) {
        $text = $this->curl($url);
        preg_match('/fullscreen=\"false\" src=\"(.*?)\"/', $text, $video);
        preg_match('/:<\/span><h1>(.*?)<\/h1><\/div><div class=/', $text, $video_title);
        preg_match('/poster=\"(.*?)\">/', $text, $video_cover);
        $video_url = str_replace('\\', '/', str_replace('u002F', '', $video[1]));
        preg_match('/<span class=\"SharePostCard__name\">(.*?)<\/span>/', $text, $video_author);
        if ($video_url) {
            $arr = [
                'code' => 200, 
                'msg' => '解析成功', 
                    'author' => $video_author[1], 
                    'title' => $video_title[1], 
                    'cover' => $video_cover[1], 
                    'url' => $video_url, 
                ];
            return $arr;
        }
    }

    public function bbq($url) {
        preg_match('/id=(.*)\b/', $url, $id);
        $arr = json_decode($this->curl('https://bbq.bilibili.com/bbq/app-bbq/sv/detail?svid=' . $id[1]), true);
        $video_url = $arr['data']['play']['file_info'][0]['url'];
        if ($video_url) {
            $arr = [
                'code' => 200, 
                'msg' => '解析成功', 
                    'author' => $arr['data']['user_info']['uname'], 
                    'avatar' => $arr['data']['user_info']['face'], 
                    'time' => $arr['data']['pubtime'], 
                    'like' => $arr['data']['like'], 
                    'title' => $arr['data']['title'], 
                    'cover' => $arr['data']['cover_url'], 
                    'url' => $video_url, 
                ];
            return $arr;
        }
    }

    public function kuaishou($url) {
        $locs = get_headers($url, true) ['Location'][1];
        preg_match('/photoId=(.*?)\&/', $locs, $matches);
        $headers = array('Cookie: did=web_9bceee20fa5d4a968535a27e538bf51b; didv=1655992503000;',
        'Referer: ' . $locs, 'Content-Type: application/json');
        $post_data = '{"photoId": "' . str_replace(['video/', '?'], '', $matches[1]) . '","isLongVideo": false}';
        $curl = curl_init();
        curl_setopt($curl, CURLOPT_URL, 'https://v.m.chenzhongtech.com/rest/wd/photo/info');
        curl_setopt($curl, CURLOPT_HTTPHEADER, $headers);
        curl_setopt($curl, CURLOPT_NOBODY, 0);
        curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
        curl_setopt($curl, CURLINFO_HEADER_OUT, TRUE);
        curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
        curl_setopt($curl, CURLOPT_POST, 1);
        curl_setopt($curl, CURLOPT_POSTFIELDS, $post_data);
        $data = curl_exec($curl);
        curl_close($curl);
        $json = json_decode($data, true);
        if ($json) {
            $arr = [
                'code' => 200, 
                'msg' => '解析成功', 
                    'avatar' => $json['photo']['headUrl'], 
                    'author' => $json['photo']['userName'], 
                    'time' => $json['photo']['timestamp'], 
                    'title' => $json['photo']['caption'], 
                    'cover' => $json['photo']['coverUrls'][key($json['photo']['coverUrls']) ]['url'], 
                    'url' => $json['photo']['mainMvUrls'][key($json['photo']['mainMvUrls']) ]['url'], 
                ];
            return $arr;
        }
    }

    public function quanmin($id) {
        if (strpos($id, 'quanmin.baidu.com/v/')) {
            preg_match('/v\/(.*?)\?/', $id, $vid);
            $id = $vid[1];
        }
        $arr = json_decode($this->curl('https://quanmin.hao222.com/wise/growth/api/sv/immerse?source=share-h5&pd=qm_share_mvideo&vid=' . $id . '&_format=json'), true);
        if ($arr) {
            $arr = ['code' => 200, 
            'msg' => '解析成功', 
                'author' => $arr["data"]["author"]['name'], 
                'avatar' => $arr["data"]["author"]["icon"], 
                'title' => $arr["data"]["meta"]["title"], 
                'cover' => $arr["data"]["meta"]["image"], 
                'url' => $arr["data"]["meta"]["video_info"]["clarityUrl"][0]['url']
            ];
            return $arr;
        }
    }

    public function basai($id) {
        $arr = json_decode($this->curl('http://www.moviebase.cn/uread/api/m/video/' . $id . '?actionkey=300303'), true);
        $video_url = $arr[0]['data']['videoUrl'];
        if ($video_url) {
            $arr = [
                'code' => 200, 
                'msg' => '解析成功', 
                    'time' => $arr[0]['data']['createDate'], 
                    'title' => $arr[0]['data']['title'], 
                    'cover' => $arr[0]['data']['coverUrl'], 
                    'url' => $video_url
                ];
            return $arr;
        }
    }

    public function before($url) {
        preg_match('/detail\/(.*)\?/', $url, $id);
        $arr = json_decode($this->curl('https://hlg.xiatou.com/h5/feed/detail?id=' . $id[1]), true);
        $video_url = $arr['data'][0]['mediaInfoList'][0]['videoInfo']['url'];
        if ($video_url) {
            $arr = [
                'code' => 200, 
                'msg' => '解析成功', 
                    'author' => $arr['data'][0]['author']['nickName'], 
                    'avatar' => $arr['data'][0]['author']['avatar']['url'], 
                    'like' => $arr['data'][0]['diggCount'], 
                    'time' => $arr['recTimeStamp'], 
                    'title' => $arr['data'][0]['title'], 
                    'cover' => $arr['data'][0]['staticCover'][0]['url'], 
                    'url' => $video_url
                ];
            return $arr;
        }
    }

    public function kaiyan($url) {
        preg_match('/\?vid=(.*)\b/', $url, $id);
        $arr = json_decode($this->curl('https://baobab.kaiyanapp.com/api/v1/video/' . $id[1] . '?f=web'), true);
        $video = 'https://baobab.kaiyanapp.com/api/v1/playUrl?vid=' . $id[1] . '&resourceType=video&editionType=default&source=aliyun&playUrlType=url_oss&ptl=true';
        $video_url = get_headers($video, true) ["Location"];
        if ($video_url) {
            $arr = [
                'code' => 200, 
                'msg' => '解析成功', 
                    'title' => $arr['title'], 
                    'cover' => $arr['coverForFeed'], 
                    'url' => $video_url
                ];
            return $arr;
        }
    }

    public function momo($url) {
        preg_match('/new-share-v2\/(.*)\.html/', $url, $id);
        if (count($id) < 1) {
            preg_match('/momentids=(\w+)/', $url, $id);
        }
        $post_data = ["feedids" => $id[1], ];
        $arr = json_decode($this->post_curl('https://m.immomo.com/inc/microvideo/share/profiles', $post_data), true);
        $video_url = $arr['data']['list'][0]['video']['video_url'];
        if ($video_url) {
            $arr = [
                'code' => 200, 
                'msg' => '解析成功', 
                    'author' => $arr['data']['list'][0]['user']['name'], 
                    'avatar' => $arr['data']['list'][0]['user']['img'], 
                    'uid' => $arr['data']['list'][0]['user']['momoid'], 
                    'sex' => $arr['data']['list'][0]['user']['sex'], 
                    'age' => $arr['data']['list'][0]['user']['age'], 
                    'city' => $arr['data']['list'][0]['video']['city'], 
                    'like' => $arr['data']['list'][0]['video']['like_cnt'], 
                    'title' => $arr['data']['list'][0]['content'], 
                    'cover' => $arr['data']['list'][0]['video']['cover']['l'], 
                    'url' => $video_url
                ];
            return $arr;
        }
    }

    public function vuevlog($url) {
        $text = $this->curl($url);
        preg_match('/<title>(.*?)<\/title>/', $text, $video_title);
        preg_match('/<meta name=\"twitter:image\" content=\"(.*?)\">/', $text, $video_cover);
        preg_match('/<meta property=\"og:video:url\" content=\"(.*?)\">/', $text, $video_url);
        preg_match('/<div class=\"infoItem name\">(.*?)<\/div>/', $text, $video_author);
        preg_match('/<div class="avatarContainer"><img src="(.*?)\"/', $text, $video_avatar);
        preg_match('/<div class=\"likeTitle\">(.*) friends/', $text, $video_like);
        $video_url = $video_url[1];
        if ($video_url) {
            $arr = [
                'code' => 200, 
                'msg' => '解析成功', 
                    'author' => $video_author[1], 
                    'avatar' => $video_avatar[1], 
                    'like' => $video_like[1], 
                    'title' => $video_title[1], 
                    'cover' => $video_cover[1], 
                    'url' => $video_url, 
                ];
            return $arr;
        }
    }

    public function xiaokaxiu($url) {
        preg_match('/id=(.*)\b/', $url, $id);
        $sign = md5('S14OnTD#Qvdv3L=3vm&time=' . time());
        $arr = json_decode($this->curl('https://appapi.xiaokaxiu.com/api/v1/web/share/video/' . $id[1] . '?time=' . time(), ["x-sign : $sign"]), true);
        if ($arr['code'] != - 2002) {
            $arr = [
                'code' => 200, 
                'msg' => '解析成功', 
                    'author' => $arr['data']['video']['user']['nickname'], 
                    'avatar' => $arr['data']['video']['user']['avatar'], 
                    'like' => $arr['data']['video']['likedCount'], 
                    'time' => $arr['data']['video']['createdAt'], 
                    'title' => $arr['data']['video']['title'], 
                    'cover' => $arr['data']['video']['cover'], 
                    'url' => $arr['data']['video']['url'][0]
                ];
            return $arr;
        }
    }

    public function pipigaoxiao($url) {
        preg_match('/post\/(.*)/', $url, $id);
        $arr = json_decode($this->pipigaoxiao_curl($id[1]), true);
        $id = $arr["data"]["post"]["imgs"][0]["id"];
        if ($id) {
            $arr = [
                'code' => 200, 
                'msg' => '解析成功', 
                    'title' => $arr["data"]["post"]["content"], 
                    'cover' => 'https://file.ippzone.com/img/view/id/' . $arr["data"]["post"]["imgs"][0]["id"], 
                    'url' => $arr["data"]["post"]["videos"]["$id"]["url"]
                ];
            return $arr;
        }
    }

    public function quanminkge($url) {
        preg_match('/\?s=(.*)/', $url, $id);
        $text = $this->curl('https://kg.qq.com/node/play?s=' . $id[1]);
        preg_match('/<title>(.*?)-(.*?)-/', $text, $video_title);
        preg_match('/cover\":\"(.*?)\"/', $text, $video_cover);
        preg_match('/playurl_video\":\"(.*?)\"/', $text, $video_url);
        preg_match('/{\"activity_id\":0\,\"avatar\":\"(.*?)\"/', $text, $video_avatar);
        preg_match('/<p class=\"singer_more__time\">(.*?)<\/p>/', $text, $video_time);
        if ($video_url[1]) {
            $arr = [
                'code' => 200, 
                'msg' => '解析成功', 
                    'title' => $video_title[2], 
                    'cover' => $video_cover[1], 
                    'url' => $video_url[1], 
                    'author' => $video_title[1], 
                    'avatar' => $video_avatar[1], 
                    'time' => $video_time[1], 
                ];
            return $arr;
        }
    }

    public function xigua($url) {
        if (strpos($url, 'v.ixigua.com') != false) {
            $loc = get_headers($url, true) ['Location'];
            preg_match('/video\/(.*)\//', $loc, $id);
            $url = 'https://www.ixigua.com/' . $id[1];
        }
        $headers = ["User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.88 Safari/537.36 ", "cookie:MONITOR_WEB_ID=7892c49b-296e-4499-8704-e47c1b150c18; ixigua-a-s=1; ttcid=af99669b6304453480454f150701d5c226; BD_REF=1; __ac_nonce=060d88ff000a75e8d17eb; __ac_signature=_02B4Z6wo00f01kX9ZpgAAIDAKIBBQUIPYT5F2WIAAPG2ad; ttwid=1%7CcIsVF_3vqSIk4XErhPB0H2VaTxT0tdsTMRbMjrJOPN8%7C1624806049%7C08ce7dd6f7d20506a41ba0a331ef96a6505d96731e6ad9f6c8c709f53f227ab1"];
        $text = $this->curl($url, $headers);
        preg_match('/<script id=\"SSR_HYDRATED_DATA\">window._SSR_HYDRATED_DATA=(.*?)<\/script>/', $text, $jsondata);
        $data = json_decode(str_replace('undefined', 'null', $jsondata[1]), 1);
        $result = $data["anyVideo"]["gidInformation"]["packerData"]["video"];
        $video_url = base64_decode($result["videoResource"]["dash"]["dynamic_video"]["dynamic_video_list"][2]["main_url"]);
        $music_url = base64_decode($result["videoResource"]["dash"]["dynamic_video"]["dynamic_audio_list"][0]["main_url"]);
        $video_author = $result['user_info']['name'];
        $video_avatar = str_replace('300x300.image', '300x300.jpg', $result['user_info']['avatar_url']);
        $video_cover = $data["anyVideo"]["gidInformation"]["packerData"]["video"]["poster_url"];
        $video_title = $result["title"];
        if ($video_url) {
            $arr = [
                'code' => 200, 
                'msg' => '解析成功', 
                    'author' => $video_author, 
                    'avatar' => $video_avatar, 
                    'like' => $result['video_like_count'], 
                    'time' => $result['video_publish_time'], 
                    'title' => $video_title, 
                    'cover' => $video_cover, 
                    'url' => $video_url, 
                    'music' => [
                        'url' => $music_url
                        ]
                ];
            return $arr;
        }
    }

    public function doupai($url) {
        preg_match("/topic\/(.*?).html/", $url, $d_url);
        $vid = $d_url[1];
        $base_url = "https://v2.doupai.cc/topic/" . $vid . ".json";
        $data = json_decode($this->curl($base_url), true);
        $url = $data["data"]["videoUrl"];
        $title = $data["data"]["name"];
        $cover = $data["data"]["imageUrl"];
        $time = $data['data']['createdAt'];
        $author = $data['data']['userId'];
        if ($url) {
            $arr = [
                'code' => 200, 
                'msg' => '解析成功', 
                    'title' => $title, 
                    'cover' => $cover, 
                    'time' => $time, 
                    'author' => $author['name'], 
                    'avatar' => $author['avatar'], 
                    'url' => $url
                ];
            return $arr;
        }
    }

    public function sixroom($url) {
        preg_match("/http[s]?:\/\/(?:[a-zA-Z]|[0-9]|[$-_@.&+]|[!*\(\),]|(?:%[0-9a-fA-F][0-9a-fA-F]))+/", $url, $deal_url);
        $headers = ['user-agent' => 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.125 Safari/537.36', 'x-requested-with' => 'XMLHttpRequest'];
        $rows = $this->curl($deal_url[0], $headers);
        preg_match('/tid: \'(\w+)\',/', $rows, $tid);
        $base_url = 'https://v.6.cn/message/message_home_get_one.php';
        $content = $this->curl($base_url . '?tid=' . $tid[1], $headers);
        $content = json_decode($content, 1);
        if ($content) {
            $arr = [
                'code' => 200, 
                'msg' => '解析成功', 
                    'title' => $content["content"]["content"][0]["content"]['title'], 
                    'cover' => $content["content"]["content"][0]["content"]['url'], 
                    'url' => $content["content"]["content"][0]["content"]['playurl'], 
                    'author' => $content["content"]["content"][0]['alias'], 
                    'avatar' => $content["content"]["content"][0]['userpic'], 
                ];
            return $arr;
        }
    }

    public function huya($url) {
        preg_match('/\/(\d+).html/', $url, $vid);
        $api = 'https://liveapi.huya.com/moment/getMomentContent';
        $response = $this->curl($api . '?videoId=' . $vid[1], ['user-agent' => 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/85.0.4183.102 Safari/537.36', 'referer' => 'https://v.huya.com/', ]);
        $content = json_decode($response, 1);
        if ($content['status'] === 200) {
            $url = $content["data"]["moment"]["videoInfo"]["definitions"][0]["url"];
            $cover = $content["data"]["moment"]["videoInfo"]["videoCover"];
            $title = $content["data"]["moment"]["videoInfo"]["videoTitle"];
            $avatarUrl = $content["data"]["moment"]["videoInfo"]["avatarUrl"];
            $author = $content["data"]["moment"]["videoInfo"]["nickName"];
            $time = $content["data"]["moment"]["cTime"];
            $like = $content["data"]["moment"]["favorCount"];
            $arr = [
                'code' => 200, 
                'msg' => '解析成功', 
                    'title' => $title, 
                    'cover' => $cover, 
                    'url' => $url, 
                    'time' => $time, 
                    'like' => $like, 
                    'author' => $author, 
                    'avatar' => $avatarUrl
                ];
            return $arr;
        }
    }

    public function pear($url) {
        $html = $this->curl($url);
        preg_match('/<h1 class=\"video-tt\">(.*?)<\/h1>/', $html, $title);
        preg_match('/_(\d+)/', $url, $feed_id);
        $base_url = sprintf("https://www.pearvideo.com/videoStatus.jsp?contId=%s&mrd=%s", $feed_id[1], time());
        $response = $this->pear_curl($base_url, $url);
        $content = json_decode($response, 1);
        if ($content['resultCode'] == 1) {
            $video = $content["videoInfo"]["videos"]["srcUrl"];
            $cover = $content["videoInfo"]["video_image"];
            $timer = $content["systemTime"];
            $video_url = str_replace($timer, "cont-" . $feed_id[1], $video);
            $arr = [
                'code' => 200, 
                'msg' => '解析成功', 
                    'title' => $title[1], 
                    'cover' => $cover, 
                    'url' => $video_url, 
                    'time' => $timer, 
                ];
            return $arr;
        }
    }

    public function xinpianchang($url) {
        $api_headers = ["User-Agent" => "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.125 Safari/537.36", "referer" => $url, "origin" => "https://www.xinpianchang.com", "content-type" => "application/json"];
        $home_headers = ["User-Agent" => "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.125 Safari/537.36", "upgrade-insecure-requests" => "1"];
        $html = $this->curl($url, $home_headers);
        preg_match('/var modeServerAppKey = "(.*?)";/', $html, $key);
        preg_match('/var vid = "(.*?)";/', $html, $vid);
        $base_url = sprintf("https://mod-api.xinpianchang.com/mod/api/v2/media/%s?appKey=%s&extend=%s", $vid[1], $key[1], "userInfo,userStatus");
        $response = $this->xinpianchang_curl($base_url, $api_headers, $url);
        $content = json_decode($response, 1);
        if ($content['status'] == 0) {
            $cover = $content['data']["cover"];
            $title = $content['data']["title"];
            $videos = $content['data']["resource"]["progressive"];
            $author = $content['data']['owner']['username'];
            $avatar = $content['data']['owner']['avatar'];
            $video = [];
            foreach ($videos as $v) {
                $video[] = ['profile' => $v['profile'], 'url' => $v['url']];
            }
            $arr = [
                'code' => 200, 
                'msg' => '解析成功', 
                    'author' => $author, 
                    'avatar' => $avatar, 
                    'cover' => $cover, 
                    'title' => $title, 
                    'url' => $video
                ];
            return $arr;
        }
    }

    public function acfan($url) {
        $headers = ['User-Agent:Mozilla/5.0 (iPhone; CPU iPhone OS 11_0 like Mac OS X) AppleWebKit/604.1.38 (KHTML, like Gecko) Version/11.0 Mobile/15A372 Safari/604.1'];
        $html = $this->acfun_curl($url, $headers);
        preg_match('/var videoInfo =\s(.*?);/', $html, $info);
        $videoInfo = json_decode(trim($info[1]), 1);
        preg_match('/var playInfo =\s(.*?);/', $html, $play);
        $playInfo = json_decode(trim($play[1]), 1);
        if ($html) {
            $arr = [
                'code' => 200, 
                'msg' => '解析成功', 
                    'title' => $videoInfo['title'], 
                    'cover' => $videoInfo['cover'], 
                    'url' => $playInfo['streams'][0]['playUrls'][0], 
            ];
            return $arr;
        }
    }

    public function meipai($url) {
        $headers = ["User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.88 Safari/537.36 ", ];
        $html = $this->curl($url, $headers);
        preg_match('/data-video="(.*?)"/', $html, $content);
        preg_match('/<meta name=\"description\" content="(.*?)"/', $html, $title);
        $video_bs64 = $content[1];
        $hex = $this->getHex($video_bs64);
        $dec = $this->getDec($hex['hex_1']);
        $d = $this->sub_str($hex['str_1'], $dec['pre']);
        $p = $this->getPos($d, $dec['tail']);
        $kk = $this->sub_str($d, $p);
        $video = 'https:' . base64_decode($kk);
        if ($video_bs64) {
            $arr = [
                'code' => 200, 
                'msg' => '解析成功', 
                    "title" => $title[1], 
                    "url" => $video
            ];
            return $arr;
        }
    }

    private function acfun_curl($url, $headers = []) {
        $header = ['User-Agent:Mozilla/5.0 (iPhone; CPU iPhone OS 11_0 like Mac OS X) AppleWebKit/604.1.38 (KHTML, like Gecko) Version/11.0 Mobile/15A372 Safari/604.1'];
        $con = curl_init((string)$url);
        curl_setopt($con, CURLOPT_HEADER, false);
        curl_setopt($con, CURLOPT_SSL_VERIFYPEER, false);
        curl_setopt($con, CURLOPT_RETURNTRANSFER, true);
        if (!empty($headers)) {
            curl_setopt($con, CURLOPT_HTTPHEADER, $headers);
        } else {
            curl_setopt($con, CURLOPT_HTTPHEADER, $header);
        }
        curl_setopt($con, CURLOPT_FOLLOWLOCATION, 1);
        curl_setopt($con, CURLOPT_TIMEOUT, 5000);
        return curl_exec($con);
    }

    private function curl($url, $headers = []) {
        $header = ['User-Agent:Mozilla/5.0 (iPhone; CPU iPhone OS 11_0 like Mac OS X) AppleWebKit/604.1.38 (KHTML, like Gecko) Version/11.0 Mobile/15A372 Safari/604.1'];
        $con = curl_init((string)$url);
        curl_setopt($con, CURLOPT_HEADER, false);
        curl_setopt($con, CURLOPT_SSL_VERIFYPEER, false);
        curl_setopt($con, CURLOPT_RETURNTRANSFER, true);
        if (!empty($headers)) {
            curl_setopt($con, CURLOPT_HTTPHEADER, $headers);
        } else {
            curl_setopt($con, CURLOPT_HTTPHEADER, $header);
        }
        curl_setopt($con, CURLOPT_TIMEOUT, 5000);
        $result = curl_exec($con);
        return $result;
    }

    private function post_curl($url, $post_data) {
        $postdata = http_build_query($post_data);
        $options = ['http' => ['method' => 'POST', 'content' => $postdata, ]];
        $context = stream_context_create($options);
        $result = @file_get_contents($url, false, $context);
        return $result;
    }

    private function pipigaoxiao_curl($id) {
        $post_data = "{\"pid\":" . $id . ",\"type\":\"post\",\"mid\":null}";
        $ch = curl_init();
        curl_setopt($ch, CURLOPT_URL, "http://share.ippzone.com/ppapi/share/fetch_content");
        curl_setopt($ch, CURLOPT_REFERER, "http://share.ippzone.com/ppapi/share/fetch_content");
        curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36");
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
        curl_setopt($ch, CURLOPT_ENCODING, 'gzip,deflate');
        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
        curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
        curl_setopt($ch, CURLOPT_TIMEOUT, 5);
        curl_setopt($ch, CURLOPT_POST, 1);
        curl_setopt($ch, CURLOPT_POSTFIELDS, $post_data);
        $output = curl_exec($ch);
        curl_close($ch);
        return $output;
    }

    private function weibo_curl($id) {
        $cookie = "login_sid_t=6b652c77c1a4bc50cb9d06b24923210d; cross_origin_proto=SSL; WBStorage=2ceabba76d81138d|undefined; _s_tentry=passport.weibo.com; Apache=7330066378690.048.1625663522444; SINAGLOBAL=7330066378690.048.1625663522444; ULV=1625663522450:1:1:1:7330066378690.048.1625663522444:; TC-V-WEIBO-G0=35846f552801987f8c1e8f7cec0e2230; SUB=_2AkMXuScYf8NxqwJRmf8RzmnhaoxwzwDEieKh5dbDJRMxHRl-yT9jqhALtRB6PDkJ9w8OaqJAbsgjdEWtIcilcZxHG7rw; SUBP=0033WrSXqPxfM72-Ws9jqgMF55529P9D9W5Qx3Mf.RCfFAKC3smW0px0; XSRF-TOKEN=JQSK02Ijtm4Fri-YIRu0-vNj";
        $post_data = "data={\"Component_Play_Playinfo\":{\"oid\":\"$id\"}}";
        $ch = curl_init();
        curl_setopt($ch, CURLOPT_URL, "https://weibo.com/tv/api/component?page=/tv/show/" . $id);
        curl_setopt($ch, CURLOPT_COOKIE, $cookie);
        curl_setopt($ch, CURLOPT_REFERER, "https://weibo.com/tv/show/" . $id);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
        curl_setopt($ch, CURLOPT_ENCODING, 'gzip,deflate');
        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
        curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
        curl_setopt($ch, CURLOPT_TIMEOUT, 5);
        curl_setopt($ch, CURLOPT_POST, 1);
        curl_setopt($ch, CURLOPT_POSTFIELDS, $post_data);
        $output = curl_exec($ch);
        curl_close($ch);
        return $output;
    }

    private function pear_curl($url, $referer) {
        $ch = curl_init();
        curl_setopt($ch, CURLOPT_URL, $url);
        curl_setopt($ch, CURLOPT_REFERER, $referer);
        curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36");
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
        curl_setopt($ch, CURLOPT_ENCODING, 'gzip,deflate');
        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
        curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
        curl_setopt($ch, CURLOPT_TIMEOUT, 5);
        $output = curl_exec($ch);
        curl_close($ch);
        return $output;
    }

    private function xinpianchang_curl($url, $headers, $referer) {
        $ch = curl_init();
        curl_setopt($ch, CURLOPT_URL, $url);
        curl_setopt($ch, CURLOPT_REFERER, $referer);
        if (!empty($headers)) {
            curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
        }
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
        curl_setopt($ch, CURLOPT_ENCODING, 'gzip,deflate');
        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
        curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
        curl_setopt($ch, CURLOPT_TIMEOUT, 5);
        $output = curl_exec($ch);
        curl_close($ch);
        return $output;
    }

    protected function getHex($url) {
        $length = strlen($url);
        $hex_1 = substr($url, 0, 4);
        $str_1 = substr($url, 4, $length);
        return ['hex_1' => strrev($hex_1), 'str_1' => $str_1];
    }

    protected function getDec($hex) {
        $b = hexdec($hex);
        $length = strlen($b);
        $c = str_split(substr($b, 0, 2));
        $d = str_split(substr($b, 2, $length));
        return ['pre' => $c, 'tail' => $d, ];
    }

    protected function sub_str($a, $b) {
        $length = strlen($a);
        $k = $b[0];
        $c = substr($a, 0, $k);
        $d = substr($a, $k, $b[1]);
        $temp = str_replace($d, '', substr($a, $k, $length));
        return $c . $temp;
    }

    protected function getPos($a, $b) {
        $b[0] = strlen($a) - (int)$b[0] - (int)$b[1];
        return $b;
    }
}

这里值得补充说明的是很多Windows搭建的PHP环境,表示会出现解析为空的情况,我们仔细研究了下

可以看到curl.cainfo在Windows里是没有指定证书的,需要使用

curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
图片[4]-抖音视频去水印接口分析 |  增加X-Bogus等验证 | 附API接口源码(2023-3-2更新)-FancyPig's blog

index.php

<?php
header('Access-Control-Allow-Origin:*');
header('Content-type: application/json');
ini_set('display_errors','off');
error_reporting(E_ALL || ~E_NOTICE);
require 'src/video_spider.php';
$url = $_REQUEST['url'];
$id = $_GET['id'];
$vid = $_GET['vid'];
$basai_id = $_GET['data'];
use Video_spider\Video;
$api = new Video;
if (strpos($url,'pipix')){
    $arr = $api->pipixia($url);
} elseif (strpos($url, 'douyin')){
    $arr = $api->douyin($url);
} elseif (strpos($url, 'huoshan')){
    $arr = $api->huoshan($url);
} elseif (strpos($url, 'h5.weishi')){
    $arr = $api->weishi($url);
} elseif (strpos($url, 'isee.weishi')){
    $arr = $api->weishi($id);
} elseif (strpos($url, 'weibo.com')){
    $arr = $api->weibo($url);
} elseif (strpos($url, 'oasis.weibo')){
    $arr = $api->lvzhou($url);
} elseif (strpos($url, 'zuiyou')){
    $arr = $api->zuiyou($url);
} elseif (strpos($url, 'xiaochuankeji')){
    $arr = $api->zuiyou($url);
    
} elseif (strpos($url, 'bbq.bilibili')){
    $arr = $api->bbq($url);
} elseif (strpos($url, 'kuaishou')){
    $arr = $api->kuaishou($url);
} elseif (strpos($url, 'quanmin')){
    if(empty($vid)){
        $arr = $api->quanmin($url);
    }else{
        $arr = $api->quanmin($vid);
    }
} elseif (strpos($url, 'moviebase')){
    $arr = $api->basai($basai_id);
} elseif (strpos($url, 'hanyuhl')){
    $arr = $api->before($url);
} elseif (strpos($url, 'eyepetizer')){
    $arr = $api->kaiyan($url);
} elseif (strpos($url, 'immomo')){
    $arr = $api->momo($url);
} elseif (strpos($url, 'vuevideo')){
    $arr = $api->vuevlog($url);
} elseif (strpos($url, 'xiaokaxiu')){
    $arr = $api->xiaokaxiu($url);
} elseif (strpos($url, 'ippzone') || strpos($url,'pipigx') ){
    $arr = $api->pipigaoxiao($url);
} elseif (strpos($url, 'qq.com')){
    $arr = $api->quanminkge($url);
} elseif (strpos($url, 'ixigua.com')){
    $arr = $api->xigua($url);
} elseif (strpos($url, 'doupai')){
    $arr = $api->doupai($url);
} elseif(strpos($url,'6.cn')){
    $arr = $api->sixroom($url);
} elseif(strpos($url,'huya.com/play/')){
    $arr = $api->huya($url);
} elseif(strpos($url,'pearvideo.com')){
    $arr = $api->pear($url);
} elseif(strpos($url,'xinpianchang.com')){
    $arr = $api->xinpianchang($url);
} elseif(strpos($url,'acfun.cn')){
    $arr = $api->acfan($url);
} elseif(strpos($url,'meipai.com')){
    $arr = $api->meipai($url);
} else {
    $arr = array(
        'code'  => 201,
        'msg' => '不支持您输入的链接'
    );
}
if (!empty($arr)){
    echo json_encode($arr, JSON_NUMERIC_CHECK | JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES);
}
else{
    $arr = array(
        'code' => 201,
        'msg' => '解析失败',
    );
    echo json_encode($arr, JSON_NUMERIC_CHECK | JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES);
}
?>

X-Bogus生成API代码

如果你想在本地部署生成X-Bogus可以参考下面的代码

© 版权声明
THE END
喜欢就支持一下吧
点赞6 分享
评论 抢沙发
头像
欢迎您留下宝贵的见解!
提交
头像

昵称

取消
昵称表情代码图片

    暂无评论内容