漁滒 发表于 2020-9-25 13:26

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内容无法保存,退出软件后需要重新输入

倔强的丫头 发表于 2020-9-25 14:47

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=

倔强的丫头 发表于 2020-9-25 15:15

aiai 发表于 2020-9-25 14:53
我这里正常,说明你的播放器没有H265的解码,安装一个即可。或者你直接下载H264的

哦哦 明白了刚试了下QQ浏览器不支持360的支持    不知道这个链接是不是永久的?能长期调用吗会不会验证cookies 判断ua之类的恶心东西

Xw丶小威 发表于 2020-9-25 13:41

支持一下。辛苦。

sdlyfxjjc 发表于 2020-9-25 13:49

感谢分享,论坛有你更精彩!!!

q130918 发表于 2020-9-25 13:55

看着很厉害的样子,真羡慕啊。
想学爬虫来,一直没静下心来

pjhq1987 发表于 2020-9-25 13:59

解析出来后可以下载视频吗?

漁滒 发表于 2020-9-25 14:13

pjhq1987 发表于 2020-9-25 13:59
解析出来后可以下载视频吗?

解析出来后复制链接到下载软件就可以下载了

倔强的丫头 发表于 2020-9-25 14:32

aiai 发表于 2020-9-25 14:13
解析出来后复制链接到下载软件就可以下载了

使出洪荒之力把截图中的第二集url拼写出来 直接放在浏览器 能播放 但却是 黑屏的   然后下载下来播放 依然是黑屏的 声音正常 就是没有画面

漁滒 发表于 2020-9-25 14:39

倔强的丫头 发表于 2020-9-25 14:32
使出洪荒之力把截图中的第二集url拼写出来 直接放在浏览器 能播放 但却是 黑屏的   然后下载下来播放 依 ...

点击复制到剪切板就可以复制全部内容,你输入的链接是什么发我看看

漁滒 发表于 2020-9-25 14:53

倔强的丫头 发表于 2020-9-25 14:47
http://v6-default.ixigua.com/cc5772c930c3a442cd37c9b6c9b40053/5f6d9785/video/tos/hxsy/tos-hxsy-ve- ...

我这里正常,说明你的播放器没有H265的解码,安装一个即可。或者你直接下载H264的
页: [1] 2 3 4 5
查看完整版本: python开发安卓App实战项目:西瓜视频解析工具