[已解決] go/python改写请教
本帖最后由 w60711 于 2022-6-18 05:15 编辑不好意思
小弟我实在不懂这个该如何改写成au3...
想请教大神能否帮忙一下
十分感谢~
看了半天只搞懂
用 SRandom(时间戳)
然后 Random(0, 12)
chars到底怎么用就搞不懂了...
原始出处:
https://github.com/miyouzi/aniGamerPlus/blob/master/Anime.py
go语言,num = 12
func randomString(num int) string {
rand.Seed(time.Now().UTC().UnixNano())
const chars = "abcdefghijklmnopqrstuvwxyz0123456789"
result := make([]byte, num)
for i := 0; i < num; i++ {
result = chars
}
return string(result)
}
python
def random_string(num):
chars = 'abcdefghijklmnopqrstuvwxyz0123456789'
random.seed(int(round(time.time() * 1000)))
result = []
for i in range(num):
result.append(chars)
return ''.join(result)
=-=-=-=-=-=-已解決-=-=-=-=-=-=
5F 有包含此問題的相關代碼
#include <Date.au3>
MsgBox(0, '', _random_string(12))
Func _random_string($num) ;; hash,伪随机数,网址需要
SRandom(_DateDiff('s', "1970/01/01 00:00:00", _NowCalc()))
;; ConsoleWrite(_DateDiff('s', "1970/01/01 00:00:00", _NowCalc()) & @CRLF)
Local $sChars = 'abcdefghijklmnopqrstuvwxyz0123456789'
Local $aChars = StringSplit($sChars, '', 2)
Local $sRt = ''
For $i = 1 To Int($num)
$sRt &= $aChars
Next
Return $sRt
EndFunc ;==>_random_string
就是获取指定长度的随机字符串吧 应该是的
MsgBox(0, '', _random_string(12))
Func _random_string($num)
Local $sChars = 'abcdefghijklmnopqrstuvwxyz0123456789'
Local $aChars = StringSplit($sChars, '', 2)
Local $sRt = ''
For $i = 1 To Int($num)
$sRt &= $aChars
Next
Return $sRt
EndFunc ;==>_random_string afan 发表于 2022-6-17 10:05
应该是的
感谢afan大的指点
想请教有没有加入 SRandom的差异是为何?
因为有没有该行,都还是能照常执行 (汗
Func _random_string($num) ;; hash,伪随机数,网址需要
SRandom(_DateDiff('s', "1970/01/01 00:00:00", _NowCalc()))
;; ConsoleWrite(_DateDiff('s', "1970/01/01 00:00:00", _NowCalc()) & @CRLF)
Local $sChars = 'abcdefghijklmnopqrstuvwxyz0123456789'
Local $aChars = StringSplit($sChars, '', 2)
Local $sRt = ''
For $i = 1 To Int($num)
$sRt &= $aChars
Next
Return $sRt
EndFunc ;==>_random_string
本帖最后由 w60711 于 2022-6-18 05:13 编辑
巴哈姆特动画疯,使ˋ用 mpv player 进行播放
此为简易代码,仅能提供 有VIP(无广告)之会员使用
(因为没有各式的判断,例如广告)
本代码尚未完善,应该还有奇怪的bug存在
例如:cookie的使用和刷新(继承)...对这不熟不会搞 = =
如果有大神愿意帮忙完善cookie部分就先感谢了QQ
;; 无系统匣图标
#NoTrayIcon
;; 请求管理员身分执行
#RequireAdmin
#Region ;**** Directives created by AutoIt3Wrapper_GUI ****
#AutoIt3Wrapper_Icon=icon.ico
#AutoIt3Wrapper_Compression=4
#AutoIt3Wrapper_UseUpx=n
#AutoIt3Wrapper_Res_Comment=ani-gamer-player
#AutoIt3Wrapper_Res_Description=ani-gamer-player
#AutoIt3Wrapper_Res_Fileversion=1.0.0.0
#AutoIt3Wrapper_Res_LegalCopyright=Copyright © 2022 MicroDuo/Sally
#AutoIt3Wrapper_Res_Language=1028
#AutoIt3Wrapper_Res_requestedExecutionLevel=highestAvailable
#AutoIt3Wrapper_Res_HiDpi=y
#AutoIt3Wrapper_AU3Check_Parameters=-d -w 1 -w 2 -w 3 -w- 4 -w 6 -w 7
#EndRegion ;**** Directives created by AutoIt3Wrapper_GUI ****
#cs ____________________________________
Au3版本:3.3.14.5
SciTE版本:4.4.6
脚本作者:Sally
脚本功能:使用 MPV Player 播放动画疯影片
建置日期:2022.06.17
参考代码:
https://github.com/c0re100/Baham ... blob/master/main.go
https://github.com/miyouzi/aniGamerPlus/blob/master/Anime.py
https://greasyfork.org/zh-TW/scr ... 85%B7%E7%AE%B1/code
#ce _______________脚本开始_________________
;;=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
;;| 载入Fuction |
;;=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
;; 防止重复执行
#include <Misc.au3>
;; 时间戳
#include <Date.au3>
;;=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
;;| 基本设定 |
;;=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
FileChangeDir(@ScriptDir) ;; 切换起始目录工作目录到指定路径
_Singleton(@ScriptName) ;; 防止重复执行
;; 判断是否以管理员身份执行
Local $ADMIN
If IsAdmin() Then
$ADMIN = "当前管理员权限执行"
Else
$ADMIN = "当前非管理员权限执行"
MsgBox(262144+48, '', $ADMIN)
EndIf
;;=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
;;| 宣告变量 |
;;=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
;; mpv路径,请填入自己的路径
Global $mpv = 'C:\_App\Audiovisual\mpv\mpv.exe'
;; 巴哈姆特-动画疯 相关变量
Global Const $Origin = "https://ani.gamer.com.tw"
;; 请填入自身的 浏览器UA
;; https://developers.whatismybrows ... e-my-user-agent=yes
;; https://www.whatsmyua.info/
;; http://service.spiritsoft.cn/ua.html
Global $UA = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/102.0.0.0 Safari/537.36"
;; 请使用 "无痕模式" 登入动画疯(仅供本程序使用,以免冲突)
;; cookie在 F12开发者工具,"Network" 标签的 "ani.gamer.com.tw" 里
;; 可以从 "https://home.gamer.com.tw/login_devices.php" 失效cookie
;; 目前有Bug...,无法刷新cookie,也无法直接使用,请随便点一部影片观看并重整页面后再获取cookie
Global $Cookie = ''
;; 取得设备ID
Global $_device_id = _get_device_id()
;; 设定影片分辨率,可选分辨率:360,540,720,1080,默认最高:Highest
Global $set_video_resolution = 'Highest'
;; 范例网址,改对应SN码即可观看
Local $ani_Url = 'https://ani.gamer.com.tw/animeVideo.php?sn=28792' ;; 28224、16983
;; 取得动画SN
Local $ani_Sn = StringRegExp($ani_Url, '(?m)\?sn=(.*?)$', 3) ;;取得纯SN
If @error <> 0 Then
MsgBox(48, '错误', '无法取得动画SN!')
Exit
EndIf
$ani_Sn = $ani_Sn
;; 宣告 最终使用的分辨率变量
Global $use_resolution
;; 取得动画标题
Local $_vidoe_title = _get_page($ani_Url, $Origin, True, $UA, $Cookie)
$_vidoe_title = StringRegExp($_vidoe_title, '(?m)<h1>(.*?)<\/h1>', 3)
If @error <> 0 Then
$_vidoe_title = '巴哈姆特 - 动画疯'
Else
$_vidoe_title = $_vidoe_title
EndIf
;;=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
;;| 程序开始 |
;;=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
If _check_cookie() = False Then Exit ;; 确认cookie是否有效
_refresh_cookie() ;; 刷新cookie,有BUG,似乎无效
Local $_get_m3u8_url = _get_m3u8() ;; 取得m3u8
;; 解析列表内容,可选分辨率:360,540,720,1080,默认最高画质
Local $url_for_mpv = _parse_Master_List($_get_m3u8_url, $set_video_resolution)
;; 以mpv开始播放影片,_RunMpv('网址', '标题', '音量')
_RunMpv($url_for_mpv, $_vidoe_title & $use_resolution, '150')
$use_resolution = '' ;; 释放最终使用的分辨率变量
;; m3u8网址
;; ConsoleWrite($url_for_mpv & @CRLF)
;; 完成,结束程序
Exit
;;=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
;;| 主要Func |
;;=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
Func _get_m3u8() ;; 取得m3u8
Local $_unlock_url = 'https://ani.gamer.com.tw/ajax/unlock.php?sn=' & $ani_Sn & '&ttl=0'
Local $_checklock_url = 'https://ani.gamer.com.tw/ajax/checklock.php?device=' & $_device_id & '&sn=' & $ani_Sn
Local $_videoStart_url = "https://ani.gamer.com.tw/ajax/videoStart.php?sn=" & $ani_Sn
Local $_m3u8_url = 'https://ani.gamer.com.tw/ajax/m3u8.php?sn=' & $ani_Sn & '&device=' & $_device_id
_get_page($_unlock_url, $Origin, True, $UA, $Cookie) ;; unlock
_get_page($_checklock_url,$Origin, True, $UA, $Cookie) ;; checklock
_get_page($_unlock_url, $Origin, True, $UA, $Cookie) ;; unlock
_get_page($_unlock_url, $Origin, True, $UA, $Cookie) ;; unlock
_get_page($_videoStart_url, $Origin, True, $UA, $Cookie) ;; videoStart
Return _get_page($_m3u8_url, $Origin, True, $UA, $Cookie) ;; getM3U8
EndFunc ;==>_get_m3u8
Func _parse_Master_List($sUrl, $sResolution = 'Highest') ;; 解析清单内容
Local $_m3u8_val = StringRegExpReplace($sUrl, '\\/', '/')
$_m3u8_val = StringRegExp($_m3u8_val, '(?m)":"(.*?)"}', 3)
If @error <> 0 Then
MsgBox(48, '错误0', '解析m3u8时出错!' & @CRLF & _Encode2Unicode($sUrl))
_debug_msg($sUrl)
Exit
EndIf
$_m3u8_val = $_m3u8_val
;; 取得4种分辨率的内容
Local $_m3u8_url = _get_page($_m3u8_val, $Origin, True, $UA, $Cookie)
;;确认内容正确,并将4种分辨率数组化,360p、540p、720p、1080p
$_m3u8_url = StringRegExp($_m3u8_url, '(?m)^(.*?).m3u8', 3)
If @error <> 0 Then $_m3u8_url = False
If $_m3u8_url = False Then
MsgBox(48, '错误1', '解析m3u8时出错!')
Exit
EndIf
;; 取得m3u8网址开头
Local $_header_url = StringRegExp($_m3u8_val, '(?m)^(.*?)\/playlist', 3)
$_header_url = $_header_url
If $sResolution = '360' Then
If UBound($_m3u8_url) - 1 = 0 Then
$_m3u8_url = $_m3u8_url
Else
$_m3u8_url = $_m3u8_url
EndIf
ElseIf $sResolution = '540' Then
If UBound($_m3u8_url) - 1 = 1 Then
$_m3u8_url = $_m3u8_url
Else
$_m3u8_url = $_m3u8_url
EndIf
ElseIf $sResolution = '720' Then
If UBound($_m3u8_url) - 1 = 2 Then
$_m3u8_url = $_m3u8_url
Else
$_m3u8_url = $_m3u8_url
EndIf
ElseIf $sResolution = '1080' Then
If UBound($_m3u8_url) - 1 = 3 Then
$_m3u8_url = $_m3u8_url
Else
$_m3u8_url = $_m3u8_url
EndIf
ElseIf $sResolution = 'Highest' Then
$_m3u8_url = $_m3u8_url
Else
$_m3u8_url = $_m3u8_url
EndIf
;; 获得最终使用的分辨率
$use_resolution = StringRegExp($_m3u8_url, '(?m)^(.*?)p\/', 3)
If @error = 0 Then
$use_resolution = ' - ' & $use_resolution & 'p'
Else
$use_resolution = ''
EndIf
;; 完整网址
Return $_header_url & '/' & $_m3u8_url & '.m3u8'
EndFunc ;==>_parse_Master_List
Func _get_device_id() ;; 取得设备ID
Local $url = 'https://ani.gamer.com.tw/ajax/getdeviceid.php'
Local $oHtmlStr = _get_page($url, $Origin, False, $UA, $Cookie) ;; 取得网页原始码
Local $sId = StringRegExp($ohtmlStr, '(?m)":"(.*?)"}', 3) ;;取得纯ID
$sId = $sId
Return $sId
EndFunc ;==>_get_device_id
;; 读取网页
Func _get_page($sUrl, $sOrigin = False, $sReferrer = False, $sUser_Agent = False, $sCookie = False)
Local $Referrer
;; HttpSetUserAgent($sUser_Agent)
Local $oHTTP = ObjCreate("winhttp.winhttprequest.5.1")
$oHTTP.Open("GET", $sUrl, False)
If $sUser_Agent <> False Then $oHTTP.SetRequestHeader("User-Agent", $sUser_Agent)
If $sReferrer <> False Then
$Referrer = "https://ani.gamer.com.tw/animeVideo.php?sn=" & $ani_Sn
$oHTTP.SetRequestHeader("Referer", $Referrer)
EndIf
If $sOrigin <> False Then $oHTTP.SetRequestHeader("Origin", $sOrigin)
If $sCookie <> False Then $oHTTP.setRequestHeader('Cookie', $sCookie)
$oHTTP.Send()
Return $oHTTP.ResponseText
EndFunc ;==>_get_page
Func _random_string($num) ;; hash,伪随机数,网址需要
SRandom(_DateDiff('s', "1970/01/01 00:00:00", _NowCalc()))
;; ConsoleWrite(_DateDiff('s', "1970/01/01 00:00:00", _NowCalc()) & @CRLF)
Local $sChars = 'abcdefghijklmnopqrstuvwxyz0123456789'
Local $aChars = StringSplit($sChars, '', 2)
Local $sRt = ''
For $i = 1 To Int($num)
$sRt &= $aChars
Next
Return $sRt
EndFunc ;==>_random_string
Func _check_cookie()
Local $url = 'https://user.gamer.com.tw/login.php'
Local $_login_page = _get_page($url, $Origin, False, $UA, $Cookie)
Local $title = StringRegExp($_login_page, '(?m)title>(.*?)<\/title', 3)
If $title = '会员登入页 - 巴哈姆特' Then
MsgBox(48, '错误', 'Cookie失效!请重新设定。')
Return False
Else
Return 'Cookie 有效!'
EndIf
EndFunc ;==>_check_cookie
Func _refresh_cookie() ;; 刷新cookie
Local $url = 'https://ani.gamer.com.tw/'
_get_page($url, $Origin, False, $UA, $Cookie)
EndFunc ;==>_refresh_Cookie
Func _Encode2Unicode($str) ;; 文字译码
Local $i, $Te, $unEncode
Local $Temp = StringRegExp($str, '(\\u\w{4})', 3)
If @error Then Return $str
For $i = 0 To UBound($Temp) - 1
$Te = ChrW(Dec(StringReplace($Temp[$i], '\u', '')))
$unEncode = StringReplace($str, $Temp[$i], $Te, 1)
$str = $unEncode
Next
Return $unEncode
EndFunc ;==>_Encode2Unicode
Func _RunMpv($sUrl, $sTitle = '巴哈姆特 - 动画疯', $sVol = '100') ;; 以mpv播放影片
If StringIsDigit($sVol) = 0 Or $sVol = '' Then $sVol = '100'
Local $command = $mpv & ' "' & $sUrl & '"' & _
' --http-header-fields="Origin: https://ani.gamer.com.tw"' & _
' --title="' & $sTitle & '" --force-window --volume=' & $sVol
Run(@ComSpec & " /c " & $command, "", @SW_HIDE)
EndFunc ;==>_RunMpv
Func _debug_msg($sUrl) ;; 除错讯息
Local $_debug_msg = ''
$_debug_msg &= 'ani_Sn' & ':' & $ani_Sn & @CRLF
$_debug_msg &= '_device_id' & ':' & $_device_id & @CRLF
$_debug_msg &= '_random_string'& ':' & _random_string(12) & @CRLF
$_debug_msg &= '_check_cookie' & ':' & _check_cookie() & @CRLF
$_debug_msg &= 'sUrl' & ':' & _Encode2Unicode($sUrl) & @CRLF
;; $_debug_msg &= @CRLF
;; $_debug_msg &= 'Origin' & ':' & $Origin & @CRLF
;; $_debug_msg &= 'UA' & ':' & $UA & @CRLF
;; $_debug_msg &= 'Cookie' & ':' & $Cookie & @CRLF
MsgBox(64, '', $_debug_msg)
Return
EndFunc ;==>_debug_msg
w60711 发表于 2022-6-18 00:23
感谢afan大的指点
想请教有没有加入 SRandom的差异是为何?
因为有没有该行,都还是能照常执行 (汗
SRandom 一个永不会重复的种子,可让随机更“真”一些。然而,一般并不需要,因为重复的概率极低,就算重复了也是随机,因为随机本身就可能重复。
页:
[1]