已掉线,重新登录

首页 > 绿虎论坛 > 杂类 > 超级灌水 (发帖)

标题: 【php源码】看小姐姐唱歌,来自52pj某网友发帖挨删了

作者: @Ta

时间: 2023-05-08发布,2023-05-09修改

点击: 907

源码是一个看小姐姐唱歌的短视频,无水印。貌似原理是一个名叫Joyful.php的php负责提供url相关参数,html的<video>标签负责播放。

演示:(25楼解决了一个BUG,貌似现在可以在任何浏览器中使用了,也包括手机浏览器)

飞机 >> 心情愉悦

原帖源码我用不了,就拜托GPT帮改了,虽然还是很难用!但至少能用

难用:
目前我只能用Microsoft Edge播放,手机浏览器和谷歌浏览器都不能播放。 以及没有下一个视频的控件,首次打开貌似需要手动播放,然后等播放完,它自动播放下一个视频。而且有概率在某个视频循环多次,离谱的是它居然能自己跳过去,这个应该不算bug,按我的理解就是数组里有多条重复数据吧

这贴超过3个评论就奉上源码
源码:视频效果在3楼,源码在5楼


[隐藏样式|查看源码]


『回复列表(44|隐藏机器人聊天)』

1.

via无法播放,我想知道干嘛的?循环观看小姐姐?

(/@Ta/2023-05-08 15:12//)

2. @艾木友尔尔巴,是的,循环播放某音随机小姐姐唱歌的,一分钟以内那种短视频,不知道哪个环节出问题了,目前无法解析JSON,可能是我的IP被禁了
(/@Ta/2023-05-08 15:37//)

3.
(/@Ta/2023-05-11 23:55//)

4.

这不是超过三个评论了吗
小米11PRO(黑)

(/@Ta/2023-05-08 17:49//)

5.

效果在3楼,源码在5楼

源码:Joyful.zip(2.24 KB) 不是我有意转载不留作者名,实在是帖子删太快了,我也不知道作者是谁?
新源码:Joyful.zip(2.95 KB)

<!DOCTYPE html>
<html>

<head>
    <meta charset="utf-8">
    <title>心情愉悦</title>
    <meta name="renderer" content="webkit">
    <meta name="referrer" content="never">
    <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
    <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
    <script src="https://cdn.bootcdn.net/ajax/libs/jquery/3.4.0/jquery.min.js"></script>
    <script src="https://cdn.bootcdn.net/ajax/libs/js-cookie/3.0.1/js.cookie.js"></script>
</head>

<body>
    <div class="container" id="player">
        <video id="video" controls autoplay style="width: 100%;"></video>
    </div>
    <button id="start">开始运行</button>
    <script>
        const cookiesMap = new Map(document.cookie.split('; ').map(cookie => cookie.split('=')).map(([name, value]) => [decodeURIComponent(name), decodeURIComponent(value)]));
        
        if (!cookiesMap.has('next')) {
        const nextValue = '{"play_addr":"https://v11-cold.douyinvod.com/d63bb47ebac366828348c6ef6b914a45/6458cfe0/video/tos/cn/tos-cn-ve-15/ok3EDlbrgEW9AI1kjDUKOrejAoAtNXbcBzQfno/?a=1128&ch=0&cr=0&dr=0&cd=0%7C0%7C0%7C0&cv=1&br=1586&bt=1586&cs=0&ds=3&ft=nK5C30071u7vpihBH6xRf4pHT4BO5.DQqhdz7tG&mime_type=video_mp4&qs=0&rc=ZTo7NGU1N2lpNDw7aGRoM0BpanNlPGU6ZmdxaDMzNGkzM0AxX2IvM2BiX18xNWFiMWNeYSNzNW82cjRvL2pgLS1kLWFzcw%3D%3D&l=2023050817324680B3BA69F50CC900CB44&btag=e00090000","video_id":"v0d00fg10000cemn2drc77ub99rb8pvg","run_time":"1,024.2","new_play_addr":"blob:https://xiaojiejie.tlip.cn/aa9ca169-de30-4865-8947-b0b4bf17b9e5"}';
          setCookie('next', nextValue, 60);
        }
        
        function setCookie(name, value, expireSeconds, path='/') {
          const expires = new Date();
          expires.setTime(expires.getTime() + expireSeconds * 1000);
          const cookieValue = encodeURIComponent(name) + '=' + encodeURIComponent(value) + (expires ? '; expires=' + expires.toUTCString() : '') + '; path=' + path;
          cookiesMap.set(name, cookieValue);
          document.cookie = cookieValue;
        }
        
        let data;

        function startVideo() {
            var result = JSON.parse(Cookies.get('next'));
            $('#player').show();
            $('#start').hide();
            $('#video').attr('src', result.play_addr);
            load();
        }

        let video = document.getElementById('video');
        video.style.width = window.innerWidth + 'px';
        video.style.height = window.innerHeight + 'px';
        video.onended = function() {
            var result = JSON.parse(Cookies.get('next'));
            $('#video').attr('src', result.new_play_addr);
            load();
        }

        function downloadBlobFile(_method, _url) {
            const request = new XMLHttpRequest();
            request.open(_method, _url);
            request.send();
            request.responseType = 'blob';
            return request;
        }

        function load() {
            $.ajax({
                type: 'get',
                url: 'Joyful.php',
                async: true,
                success: function(result) {
                    downloadBlobFile('GET', result.play_addr).onreadystatechange = res => {
                        if (res.currentTarget.readyState == 4 && res.currentTarget.status == 200) {
                            result.new_play_addr = window.URL.createObjectURL(res.currentTarget.response);
                            result = JSON.stringify(result);
                            Cookies.set('next', result, 60);

                            var video = $('#video');
                            video.attr('src', result.play_addr);
                            video[0].onended = function() {
                                var result = JSON.parse(Cookies.get('next'));
                                $('#video').attr('src', result.new_play_addr);
                                load();
                            };

                            $('#player').show();
                        }
                    }
                },
                error: function() {
                    //layer.msg('加载失败,等待下一次加载...');
                }
            });
        }

        $(document).ready(function() {
            startVideo();
        });
    </script>
</body>

</html>
<?php 
if ((isset($_SERVER["HTTP_X_REQUESTED_WITH"]) && strtolower($_SERVER["HTTP_X_REQUESTED_WITH"]) == "xmlhttprequest") || isset($_GET['jump'])) {
    $starttime = microtime(1);
    $result['run_time'] = number_format((microtime(1) - $starttime) * 1000, 1);
    $listApi = 'https://gitee.com/QQ-2731371/codes/nxe5yoirc9l8s70dzvawh50/raw?blob_name=JoyfulList'; // 可自己进行收集整理,这不算推广地址吧?
    $video_id = get_video_id($listApi);
    $result = array();
    $result['play_addr'] = getRedirect('https://aweme.snssdk.com/aweme/v1/play/?video_id=' . $video_id);
    $result['video_id'] = $video_id;
    $result['run_time'] = number_format((microtime(1) - $starttime) * 1000, 1);
    if (isset($_GET['jump'])) {
        header('Location: ' . $result['play_addr']);
    }
    header("Content-Type: application/json");
    echo json_encode($result);
    exit('');
}
 
function get_video_id($Api)
{
    $cache = __DIR__ . '/Joyful.txt';
    if (is_file($cache)) {
        $Data = unserialize(file_get_contents($cache));
        if (count($Data) == 0) {
            $Data = json_decode(file_get_contents($cache), true);
        }
    } else {
        $Data = json_decode(file_get_contents($Api), true);
    }
    $key = rand(0, count($Data) - 1);
    $video_id = $Data[$key];
    unset($Data[$key]);
    file_put_contents($cache, serialize(array_values($Data)));
    return $video_id;
}
 
function getRedirect($Url)
{
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $Url);
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
    curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
    curl_setopt($ch, CURLOPT_HTTPHEADER, array(
        'Accept: */*',
        'Accept-Encoding: gzip',
        'Connection: Keep-Alive',
        'User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1)'
    ));
    curl_setopt($ch, CURLOPT_HEADER, true);
    curl_setopt($ch, CURLOPT_NOBODY, 1);
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    $ret = curl_exec($ch);
 
    curl_close($ch);
    preg_match("/Location: (.*?)\r\n/iU", $ret, $location);
    if (isset($location[1])) {
        return $location[1];
    }
    return false;
}
?>
(/@Ta/2023-05-09 19:18//)

6. 效果在3楼,源码在5楼,@没落的情绪@艾木友尔尔巴
(/@Ta/2023-05-08 18:09//)

7.

@TabKey9,你的效果是没法用了吗?
小米11PRO(黑)

(/@Ta/2023-05-08 22:39//)

8.

@TabKey9,丢到服务器,效果和你的一样
小米11PRO(黑)

(/@Ta/2023-05-08 22:42//)

9. @没落的情绪,指望不上了,拿去得改的,还不如你重写算了,代码中,有一个列表:https://gitee.com/QQ-2731371/codes/nxe5yoirc9l8s70dzvawh50/raw?blob_name=JoyfulList

每一个值代表一个视频id,然后拼到解析url上,会得到一个无水印的视频源,'https://aweme.snssdk.com/aweme/v1/play/?video_id=' . $video_id

可以直接浏览器中播放或者放<video>标签上播放,大致就是这么回事!!!
(/@Ta/2023-05-08 23:19//)

10. @没落的情绪,虽然很难用,但我还是能勉强用Edge浏览器访问的!(前提是不删Cookies)
(/@Ta/2023-05-08 23:28//)

11.

@没落的情绪,你试试把这段代码写进浏览器中的Cookies,说不定能用哦,我就是这么解决的。
微信截图_20230509162445.png(837.46 KB)
Cookies:

next:
{%22play_addr%22:%22https://v11-cold.douyinvod.com/d63bb47ebac366828348c6ef6b914a45/6458cfe0/video/tos/cn/tos-cn-ve-15/ok3EDlbrgEW9AI1kjDUKOrejAoAtNXbcBzQfno/?a=1128&ch=0&cr=0&dr=0&cd=0%257C0%257C0%257C0&cv=1&br=1586&bt=1586&cs=0&ds=3&ft=nK5C30071u7vpihBH6xRf4pHT4BO5.DQqhdz7tG&mime_type=video_mp4&qs=0&rc=ZTo7NGU1N2lpNDw7aGRoM0BpanNlPGU6ZmdxaDMzNGkzM0AxX2IvM2BiX18xNWFiMWNeYSNzNW82cjRvL2pgLS1kLWFzcw%253D%253D&l=2023050817324680B3BA69F50CC900CB44&btag=e00090000%22%2C%22video_id%22:%22v0d00fg10000cemn2drc77ub99rb8pvg%22%2C%22run_time%22:%221%2C024.2%22%2C%22new_play_addr%22:%22blob:https://xiaojiejie.tlip.cn/aa9ca169-de30-4865-8947-b0b4bf17b9e5%22}

注意next是key,{%22play_addr**17b9e5%22}才是value。

解码后长这样,末尾有个域名(替换成你自己的,虽然不放根目录也可以用,但当我第一次看到这个字符串结构的时候(我之前放在二级目录的),我还是考虑新建个站点给它用)

// 不要复制这个,仅供参考
{"play_addr":"https://v11-cold.douyinvod.com/d63bb47ebac366828348c6ef6b914a45/6458cfe0/video/tos/cn/tos-cn-ve-15/ok3EDlbrgEW9AI1kjDUKOrejAoAtNXbcBzQfno/?a=1128&ch=0&cr=0&dr=0&cd=0%7C0%7C0%7C0&cv=1&br=1586&bt=1586&cs=0&ds=3&ft=nK5C30071u7vpihBH6xRf4pHT4BO5.DQqhdz7tG&mime_type=video_mp4&qs=0&rc=ZTo7NGU1N2lpNDw7aGRoM0BpanNlPGU6ZmdxaDMzNGkzM0AxX2IvM2BiX18xNWFiMWNeYSNzNW82cjRvL2pgLS1kLWFzcw%3D%3D&l=2023050817324680B3BA69F50CC900CB44&btag=e00090000","video_id":"v0d00fg10000cemn2drc77ub99rb8pvg","run_time":"1,024.2","new_play_addr":"blob:https://xiaojiejie.tlip.cn/aa9ca169-de30-4865-8947-b0b4bf17b9e5"}

如图,我新建这个Cookies之后,刷新就能用了

还有可能需要上个免费的域名证书ssl

(/@Ta/2023-05-09 16:38//)

12.

@TabKey9,确实可以,在火狐浏览器上面试了,谷歌浏览器和Edge浏览器不知道咋添加Cookies
小米11PRO(黑)

(/@Ta/2023-05-09 17:38//)

13.

@ChatGPT,帮我写一段前端js代码:检查客户端浏览器Cookies中一个叫next的值,如果不存在,则创建该值,key是next,value是{%22play_addr%22:%22&mime_type=video_mp4%22}}

(/@Ta/2023-05-09 17:51//)

14.

[Default (GPT-3.5)] [新会话] @TabKey9,以下是一个简单的前端JS代码片段,它会检查浏览器的Cookie是否具有名为"next"的值。如果该值不存在,则将一个名为"next"、值为{%22play_addr%22:%22&mime_type=video_mp4%22}}的Cookie添加到浏览器中:

// 检查浏览器Cookies中是否存在名为"next"的Cookie
if (!getCookie("next")) {
  // 如果不存在,则创建一个名为"next",值为"{%22play_addr%22:%22&mime_type=video_mp4%22}}"的Cookie
  setCookie("next", "{%22play_addr%22:%22&mime_type=video_mp4%22}}");
}

// 获取指定名称的Cookie的值
function getCookie(name) {
  const cookies = document.cookie.split(';');
  for(let i=0; i<cookies.length; i++) {
    const cookie = cookies[i].trim();
    if (cookie.indexOf(name) === 0) {
      return cookie.substring(name.length+1, cookie.length);
    }
  }
  return null;
}

// 设置Cookie
function setCookie(name, value) {
  document.cookie = name + "=" + value + "; path=/";
}

请注意,此代码仅为演示用途,并且可能需要根据您的特定需求进行修改。例如,您可能需要更改Cookie的过期时间或域名。

(/@Ta/2023-05-09 17:52//)

15. @ChatGPT,加上过期时间60
(/@Ta/2023-05-09 17:58//)

16.

@TabKey9,下面是修改后的代码,它在创建Cookie时将过期时间设置为60秒:

if (!getCookie("next")) {
  const value = encodeURIComponent('{"play_addr":"&mime_type=video_mp4"}');
  setCookie("next", value, 60);
}

function getCookie(name) {
  const cookies = document.cookie.split(';');
  for(let i=0; i<cookies.length; i++) {
    const cookie = cookies[i].trim();
    if (cookie.indexOf(name) === 0) {
      return decodeURIComponent(cookie.substring(name.length+1, cookie.length));
    }
  }
  return null;
}

function setCookie(name, value, expireSeconds) {
  const expires = new Date();
  expires.setTime(expires.getTime() + expireSeconds * 1000);
  const cookieValue = encodeURIComponent(value) + (expires ? "; expires=" + expires.toUTCString() : '') + "; path=/";
  document.cookie = name + "=" + cookieValue;
}

注意,我们在setCookie()函数中添加了一个名为expireSeconds的新参数,并将其用于设置Cookie的过期时间。我们还使用encodeURIComponent()函数对值进行编码,并使用decodeURIComponent()函数对其进行解码以防止出现特殊字符。在setCookie()函数中,我们使用expires变量创建一个新的Date对象,并将其设置为当前时间加上指定的秒数。最后,我们使用新的变量cookieValue来设置Cookie,并将过期时间添加到Cookie的字符串中。

(/@Ta/2023-05-09 17:58//)

17.
层主 @TabKey9 于 2023-05-09 18:35 删除了该楼层。
(/@Ta/2023-05-09 18:00//
被锁定
)

18.
楼主 @TabKey9 于 2023-05-09 18:35 删除了该楼层,理由如下:

无关回复

(/@Ta/2023-05-09 18:00//
被锁定
)

19.
层主 @TabKey9 于 2023-05-09 18:35 删除了该楼层。
(/@Ta/2023-05-09 18:10//
被锁定
)

下一页 1/3页,共44楼

回复需要登录

9月7日 15:26 星期天

本站由hu60wap6驱动

备案号: 京ICP备18041936号-1