python开发安卓App实战项目:西瓜视频解析工具
本帖最后由 aiai 于 2020-9-25 13:29 编辑python要开发app就要用到kivy的模块,关于kivy开发环境的安装网上非常多,就不多说了。
整个开发过程主要涉及布局和事件两个方面,首先是关于布局方面
# 初始化部件
urlinput = TextInput(
text="",
size_hint=(1, 0.1),
pos_hint={'x': 0, 'y': 0.9},
hint_text="请输入链接地址"
)
cookieinput = TextInput(
text="",
size_hint=(1, 0.1),
pos_hint={'x': 0, 'y': 0.8},
hint_text="请输入cookie"
)
rundobutton = Button(
text="解析",
size_hint=(0.33, 0.08),
pos_hint={'x': 0, 'y': 0.72},
on_release=dorun
)
doemptyurlbutton = Button(
text="清空地址",
size_hint=(0.33, 0.08),
pos_hint={'x': 0.33, 'y': 0.72},
on_release=cleanurl
)
doemptycookiebutton = Button(
text="清空帐号",
size_hint=(0.34, 0.08),
pos_hint={'x': 0.66, 'y': 0.72},
on_release=cleancookie
)
nextdobutton = Button(
text="下一集",
size_hint=(0.33, 0.08),
pos_hint={'x': 0, 'y': 0.64},
on_release=donext
)
alldobutton = Button(
text="全集",
size_hint=(0.33, 0.08),
pos_hint={'x': 0.33, 'y': 0.64},
on_release=doall
)
copybutton = Button(
text="复制到剪切板",
size_hint=(0.34, 0.08),
pos_hint={'x': 0.66, 'y': 0.64},
on_release=copytext
)
resultinput = TextInput(
text="解析结果",
size_hint=(1, 0.64),
pos_hint={'x': 0, 'y': 0}
)
主要是设置每个部件的大小和位置,对于输入框设置文字和默认文字,对于按钮,设置点击事件的回调函数
设置好布局以后,就可以编写每个事件的逻辑了
# 设置按钮部件的事件
def cleanurl(arg):
urlinput.text = ""
def cleancookie(arg):
cookieinput.text = ""
def dorun(arg):
# 设置响应的回调方法
def success(requests, results):
if results['code'] == '0':
resultinput.text = '解析结果\n'
for video in results['video_list']:
resultinput.text += results['video_title']+' '+str(video['vwidth'])+'X'+str(video['vheight'])+' '+video['definition']+' '+str(int(video['size']/1024/1024))+'MB '+video['codec_type']+'\n'
resultinput.text += base64.b64decode(video['main_url'].encode()).decode()+'\n'
else:
resultinput.text = '解析结果 '+results['message']
def error(requests, errors):
resultinput.text = '解析结果 '+str(errors)
# 请求解析结果
url = urlinput.text
headers = {'cookie': cookieinput.text.replace('\n', '').strip()}
apiurl = 'http://106.55.157.247:80/geturl/?url=' + url
UrlRequest(url=apiurl, req_headers=headers, on_success=success, on_error=error)
def donext(arg):
pass
def doall(arg):
pass
def copytext(arg):
resultinput.copy(data=resultinput.text)
在解析部分,因为涉及某些问题,所以将部分逻辑放到我自己的服务器上通过kivy提供的UrlRequest类来进行通信
同时需要为这个请求绑定成功和失败的两个回调函数
还有一个问题是因为kivy默认是不能显示中文的,所以还需要导入中文字体
# 加载中文字体
resource_add_path(os.path.abspath('.'))
LabelBase.register('Roboto', 'DroidSansFallback.ttf')
最后就是构件一个app实例,将设置的部件添加进去,下面是完整代码
import os
import base64
from kivy.app import App
from kivy.network.urlrequest import UrlRequest
from kivy.uix.floatlayout import FloatLayout
from kivy.resources import resource_add_path
from kivy.uix.textinput import TextInput
from kivy.core.text import LabelBase
from kivy.uix.button import Button
# 加载中文字体
resource_add_path(os.path.abspath('.'))
LabelBase.register('Roboto', 'DroidSansFallback.ttf')
# 设置按钮部件的事件
def cleanurl(arg):
urlinput.text = ""
def cleancookie(arg):
cookieinput.text = ""
def dorun(arg):
# 设置响应的回调方法
def success(requests, results):
if results['code'] == '0':
resultinput.text = '解析结果\n'
for video in results['video_list']:
resultinput.text += results['video_title']+' '+str(video['vwidth'])+'X'+str(video['vheight'])+' '+video['definition']+' '+str(int(video['size']/1024/1024))+'MB '+video['codec_type']+'\n'
resultinput.text += base64.b64decode(video['main_url'].encode()).decode()+'\n'
else:
resultinput.text = '解析结果 '+results['message']
def error(requests, errors):
resultinput.text = '解析结果 '+str(errors)
# 请求解析结果
url = urlinput.text
headers = {'cookie': cookieinput.text.replace('\n', '').strip()}
apiurl = 'http://106.55.157.247:80/geturl/?url=' + url
UrlRequest(url=apiurl, req_headers=headers, on_success=success, on_error=error)
def donext(arg):
pass
def doall(arg):
pass
def copytext(arg):
resultinput.copy(data=resultinput.text)
# 初始化部件
urlinput = TextInput(
text="",
size_hint=(1, 0.1),
pos_hint={'x': 0, 'y': 0.9},
hint_text="请输入链接地址"
)
cookieinput = TextInput(
text="",
size_hint=(1, 0.1),
pos_hint={'x': 0, 'y': 0.8},
hint_text="请输入cookie"
)
rundobutton = Button(
text="解析",
size_hint=(0.33, 0.08),
pos_hint={'x': 0, 'y': 0.72},
on_release=dorun
)
doemptyurlbutton = Button(
text="清空地址",
size_hint=(0.33, 0.08),
pos_hint={'x': 0.33, 'y': 0.72},
on_release=cleanurl
)
doemptycookiebutton = Button(
text="清空帐号",
size_hint=(0.34, 0.08),
pos_hint={'x': 0.66, 'y': 0.72},
on_release=cleancookie
)
nextdobutton = Button(
text="下一集",
size_hint=(0.33, 0.08),
pos_hint={'x': 0, 'y': 0.64},
on_release=donext
)
alldobutton = Button(
text="全集",
size_hint=(0.33, 0.08),
pos_hint={'x': 0.33, 'y': 0.64},
on_release=doall
)
copybutton = Button(
text="复制到剪切板",
size_hint=(0.34, 0.08),
pos_hint={'x': 0.66, 'y': 0.64},
on_release=copytext
)
resultinput = TextInput(
text="解析结果",
size_hint=(1, 0.64),
pos_hint={'x': 0, 'y': 0}
)
# 使用浮动布局
class IndexPage(FloatLayout):
def __init__(self, **kwargs):
super().__init__(**kwargs)
# 添加部件
self.add_widget(urlinput)
self.add_widget(cookieinput)
self.add_widget(rundobutton)
self.add_widget(doemptyurlbutton)
self.add_widget(doemptycookiebutton)
self.add_widget(nextdobutton)
self.add_widget(alldobutton)
self.add_widget(copybutton)
self.add_widget(resultinput)
class TestAPP(App):
# 重写build方法
def build(self):
# 返回一个布局实例
return IndexPage()
if __name__ == '__main__':
# 启动APP
TestAPP().run()
软件启动界面
解析成功界面
软件下载地址:https://www.lanzoux.com/b00zu3v5a
已知问题
1.下一集和全集按钮事件还没有编写逻辑,点击后暂无反应
2.cookie内容无法保存,退出软件后需要重新输入 aiai 发表于 2020-9-25 14:39
点击复制到剪切板就可以复制全部内容,你输入的链接是什么发我看看
http://v6-default.ixigua.com/cc5772c930c3a442cd37c9b6c9b40053/5f6d9785/video/tos/hxsy/tos-hxsy-ve-26/d457026e002b4f958275f2580ecd3c0c/?a=0&br=4422&bt=1474&cr=1&cs=&cv=1&dr=0&ds=4&er=&l=202009251323530101290490782E060381&lr=&mime-type=video_mp4&qs=0&rc=aGRmaWhpOWYzZ2hoNTY3M0ApO2UzNDU4Zjs1Nzo0ZGVmaGc1MWIzYjJjNmExNF81Li9jczAtMjQwLzQwMWIyMWIzYC46Yw%3D%3D&vl=&vr= aiai 发表于 2020-9-25 14:53
我这里正常,说明你的播放器没有H265的解码,安装一个即可。或者你直接下载H264的
哦哦 明白了刚试了下QQ浏览器不支持360的支持 不知道这个链接是不是永久的?能长期调用吗会不会验证cookies 判断ua之类的恶心东西 支持一下。辛苦。 感谢分享,论坛有你更精彩!!! 看着很厉害的样子,真羡慕啊。
想学爬虫来,一直没静下心来 解析出来后可以下载视频吗? pjhq1987 发表于 2020-9-25 13:59
解析出来后可以下载视频吗?
解析出来后复制链接到下载软件就可以下载了 aiai 发表于 2020-9-25 14:13
解析出来后复制链接到下载软件就可以下载了
使出洪荒之力把截图中的第二集url拼写出来 直接放在浏览器 能播放 但却是 黑屏的 然后下载下来播放 依然是黑屏的 声音正常 就是没有画面 倔强的丫头 发表于 2020-9-25 14:32
使出洪荒之力把截图中的第二集url拼写出来 直接放在浏览器 能播放 但却是 黑屏的 然后下载下来播放 依 ...
点击复制到剪切板就可以复制全部内容,你输入的链接是什么发我看看 倔强的丫头 发表于 2020-9-25 14:47
http://v6-default.ixigua.com/cc5772c930c3a442cd37c9b6c9b40053/5f6d9785/video/tos/hxsy/tos-hxsy-ve- ...
我这里正常,说明你的播放器没有H265的解码,安装一个即可。或者你直接下载H264的