首页 开发编程 正文

php怎么截取数据

api="http:platform=10901&vid=%s"%vidcontent=urllib.urlopen(api)output_json=JSONDecoder().decode(content.read()[13:uid=&?type=mp4&rate=1&...

php怎么截取数据,VIP视频解析是什么原理?

网络上大量存在的Vip视频解析都是依赖于视频解析接口,这些接口通过传递视频播放网址这个参数进行某些运算,如果找到匹配链接的资源就返回视频源。

例如: http://player.jfrft.net/index.php?url=视频地址(你在视频网址能找到的资源,比如:爱奇艺)

一般普通的解密提取http请求里面的关键字段,如uid等信息,然后用抓包工具分析(谷歌浏览器就可以)。一般都会在js里面根据这些信息计算出地址,简单点的自己跟踪下就可以取得地址了,复杂一些的最好用js工具随时调试js与他的算法最后计算出来。最复杂的可能会需要pjswf播放器取得一些数据。其实过程和网页填表自动注册那些差不多,类似代码github上有很多,像B站,优酷,搜狐视频都可以解析,不用从头开始。比如腾讯的取得vid以后这样算出来地址:

def qq_download_by_vid(vid,):

api = "http://h5vv.video.qq.com/getinfo?otype=json&platform=10901&vid=%s" % vid

content = urllib.urlopen(api)

output_json =JSONDecoder().decode(content.read()[13:-1])

print(output_json)

url = output_json['vl']['vi'][0]['ul']['ui'][0]['url']

fvkey = output_json['vl']['vi'][0]['fvkey']

mp4 = output_json['vl']['vi'][0]['cl'].get('ci', None)

if mp4:

mp4 = mp4[0]['keyid'].replace('.10', '.p') + '.mp4'

else:

mp4 = output_json['vl']['vi'][0]['fn']

url = '%s/%s?vkey=%s' % ( url, mp4, fvkey )

print(url)

这里以解析爱奇艺VIP视频,演示如何解析。

准备工作爱奇艺账号 且 开通VIP!!有一定的码农必备知识。会抓包,简单的浏览器F12即可。抓包步骤

1)访问VIP视频地址:http://m.iqiyi.com/v_19rremkzyc.html。利用浏览器控制台查看页面的请求地址!

2)控制台可以看见这么一个请求!

http://cache.m.iqiyi.com/jp/tmts/831920700/6ec85fe94defea1f2087ada1b920cafc/?uid=&cupid=qc_100001_100186&platForm=h5&qyid=qi1ijwoinae34yf4iyqd0y41&agenttype=13&type=mp4&nolimit=&k_ft1=8&rate=1&sgti=13_qi1ijwoinae34yf4iyqd0y41_1511620436546&codeflag=1&preIDAll=&dfp=e178cb668f3c7d441ea3783ed6f05fc009bbe93c3ea1f7595736ebc7d7306430f0&qd_v=1&qdy=a&qds=0&tm=1511620436&src=02020031010000000000&callback=tmtsCallback&vf=31101d0bbb6a139d7bbe17a64936ffc4

vf算法:md5(‘/jp/tmts/这里省略&callback=tmtsCallback’+’3sj8xof48xof4tk9f4tk9ypgk9ypg5ul’);//u6fnp3eok0dpftcq9qbr4n9svk8tqh7u

查看请求的内容!可以看见视频的地址!

上图,红色框里的内容目前可以永久缓存使用

/videos/v0/20171108/c6/6d/cd9dbc9c189f48494890ebb91778571f.mp4

3)视频地址组合

mp4地址组合:http://60.217.240.163/videos/v0/20171108/c6/6d/cd9dbc9c189f48494890ebb91778571f.mp4会员视频、用券视频、付费视频,都可以这样使用,无需key算法和ip算法

ts地址组合:http://60.217.240.16/videos/v0/20171125/07/c7/148c1b66722f0d61cb3def751cf78b6b.ts?qdv=1&start=0&end=603730&hsize=65783&tag=0&v=0&contentlength=275984

获取IP地址

通过ping获取到的可用(替换)ip

150.138.210.121

150.138.210.53

150.138.210.52

150.138.210.54

150.138.210.50

60.217.240.163

150.138.210.55

150.138.210.49

150.138.210.57

60.217.240.161

175.43.123.1

150.138.210.59

60.217.240.162

60.217.240.166

60.217.240.169

60.217.240.165

175.43.123.52

视频分流

那些真大佬将抓取到的VIP视频会分流到一些网盘中,方便给其他用户使用观看。这样不管爱奇艺视频地址怎么变也不影响了。

bracket是键盘上的哪个键?

brackets 快捷键

Display shortcuts (扩展) ctrl+alt+/ 调出快捷键的快捷键tab 自动补全 下一个文件ctrl+b 当选中一个文本时,会出现相同的文本,被高亮显示 按ctrl+b 相同的文本就全部获得了焦点 这样就可以同时更改这些相同的文本ctrl+e 打开或关闭快速编辑alt+u 注释ctrl+/ 注释ctrl+\ 注释ctrl+d 复制一行ctrl+Shift+d 删除一行ctrl+shift+f 在项目中搜索Esc 退出搜索 (好像也可以退出其它的)alt+u 注释ctrl+/ 注释ctrl+\ 注释ctrl+q 退出整个编辑器ctrl+w 关闭当前文件ctrl+e 查找文档ctrl+k 查找文档 可以快速查看 PHP 的帮助文档。

选中位置,使用快捷键 command + K(mac),ctrl + K (windows),可以快速查看 PHP 的帮助文档。

ctrl+g 跳到某一行 (输行号)tab 自动补全ctrl+x 剪切 一行全剪切掉ctrl+l (英文字母) 选中一行ctrl+shift+k 删除整个标签 删除外标签shift+command+, 进行选择 移动,扩大范围shift+command+. 进行选择 缩小范围快捷键Ctrl/Cmd+Shift+H可以呼出与关闭文件树。ctrl+shift+O 打开快速导航 快速打开文件

ctrl+shift+C 去掉实时预览的功能

ctrl+shift+Z 一步一步选中扩大

ctrl+shift+X 选中扩大和缩小

alt+ctrl+->跳到下一个编辑点

ctrl+shift+a 选中一段文字后外加标签 然后回车 里面可以是 div.container 或 ul>li* 等

ctrl+alt+c 收缩代码

ctrl+alt+b 选中标签内的内容 再按一次 包含标签ctrl+shift+m 选中标签内的内容 (包括标签) 但是代码全集中堆在一起了

ctrl+alt+z 一步步扩大选中标签 balance(outward) 默认 ctrl+shift+bctrl+alt+shift+z balance(inward)

java的反射到底是有什么用处?

谢邀。在Java中,反射是一种API,用于在运行时检查或修改方法、类、接口的行为。

反射所需的类在java.lang.reflect包下提供。反射为我们提供了有关对象所属类的信息,以及可以使用该对象执行的该类的方法。通过反射,我们可以在运行时调用方法,而与它们所使用的访问说明符无关。反射可用于获取有关一些的有用信息类 getClass()方法用于获取对象所属的类的名称。构造函数 getConstructors()方法用于获取对象所属类的公共构造函数。方法 getMethods()方法用于获取对象所属类的公共方法。简单的例子

为了先清楚下反射的用处,我们将看一个非常基本的示例,该示例在运行时检查简单Java对象的字段。

让我们创建一个简单的Person类,其中仅包含name和age字段,而根本不包含任何方法。这是Person类:

现在,我们将使用Java反射来发现此类所有字段的名称。为了欣赏反射的力量,我们将构造一个Person对象并将Object作为引用类型:

这个测试告诉我们,我们能够得到的数组Field对象从我们人的对象,即使参考对象是对象的父类。

在上面的示例中,我们仅对这些字段的名称感兴趣,但是还有很多事情可以做,我们将在后续部分中看到更多示例。

注意我们如何使用一个辅助方法来提取实际的字段名,这是一个非常基本的代码:

重点观察如果知道方法的名称和参数类型,则可以通过反射调用该方法。为此,我们使用以下两种方法getDeclaredMethod():创建要调用的方法的对象。该方法的语法是Class.getDeclaredMethod(名称,参数类型)name-要创建其对象的方法的名称parametertype-参数是Class对象的数组

invoke():要在运行时调用类的方法,我们使用以下方法——

Method.invoke(对象,参数)如果类的方法不接受任何方法 参数,然后将null用作参数。通过反射,我们可以在类的类对象的帮助下访问类的私有变量和方法,并通过使用对象来调用方法,如上所述。为此,我们使用以下两种方法。

Class.getDeclaredField(FieldName):用于获取私有字段。返回指定类型字段名称的字段类型的对象。Field.setAccessible(true): 允许访问该字段,而与该字段使用的访问修饰符无关。

使用发射的优势可扩展性功能:应用程序可以通过使用其完全限定的名称创建可扩展性对象的实例来使用外部的用户定义类。调试和测试工具:调试器使用反射的属性检查类的私有成员。缺点性能开销:反射操作比非反射操作的性能要慢,因此应避免在对性能敏感的应用程序中经常调用的代码段中避免这样做。内部曝光:反射代码破坏了抽象,因此可能会随着平台升级而改变行为。

蜘蛛是如何爬取页面内容的?

学过SEO的同学们都知道蜘蛛有两种爬行方式:深度和广度,又叫横向抓取和纵向抓取,那么这个蜘蛛到底是怎么运作的呢?

如果真的想要了解这方面的东西,就必须要了解程序,数据库,编程语言。以PHP为例,其中有一个函数叫作file_get_contents,这个函数的作用就是获取URL里面的内容,并以文本的方式返回结果,当然也可以用CURL。

然后,就可以利用程序里面的正则表达式,对链接的数据进行提取、合并、去重等复杂操作,并将数据存入数据库。数据库有很多,比如:索引库、收录库等等。

当抓取数据完成上面操作后,自然也就得到了数据库里面不存在的链接,接着,程序会发出另一个指令,抓取这些库里面没存的URL。直致页面全部完成抓取。当然更有可能的是抓取完成后,不再抓取。

在百度站长平台会有抓取频次及抓取时间的数据,你应该可以见到,每个蜘蛛抓取是毫无规律可言,但你通过日常观察可以发现,页面深度越深,被抓取到的概率越低。

蜘蛛虽然有随机性和时效性,但也还是有许多规律可寻,比如流量对于蜘蛛有非常直接的正向作用,所以日常的操作当中你也会发现,一旦有流量进入到站点,蜘蛛也会随着增多,这种蜘蛛表现尤其是在一些违规操作里面表现的更为明显,比如百度刷排名!

PHP在字符串中截取出后三位数字并将该数字加一?

$str = substr($str, 0, -3) . str_pad(substr($str, -3) + 1, 3, "0", STR_PAD_LEFT)

如果你面对的字符串中包含中文等字符集,可以考虑使用mb系列函数来对应实现

本文转载自互联网,如有侵权,联系删除