python中不論類的名字是什么歌_Python自動猜歌名,還愁排名上不去嘛?

前言

相傳,就在前幾日,在網上閑逛時,刷到了一個猜歌的小程序。這個小程序通過播放歌曲部分片段,然后讓用戶來猜它的歌名,大概是這樣的:

a49ca27109666a4f24089bde45692334.png

作為一個腦熱的聽歌愛好者,于是他越陷越深,越刷越得勁。可是,他的 「排名竟一直上不去」!正當他惆悵之際,一個絕妙的想法 「ding」的一下就出現了,學會了它,媽媽再也不用擔心他的排名上不去了!

一、思路分析

為了搞清楚猜歌的過程是什么樣的,首先通過抓包來對請求和響應進行分析。在PC版微信中打開小程序,然后通過Fiddler進行抓包。我們會發現猜歌的過程由兩個請求構成。 (ps.當然也可以直接抓手機端的包,但是由于各種原因,會相對復雜一些)一個是 「獲取歌曲的相關信息」(包括答案)。對!你沒有聽錯,返回的數據直接包括了猜歌的答案,請求如下:

09e05ce3e8db079fc768fc3bfd096e44.png

這是一個get請求,包括了用于登陸驗證的 「token」、 「user_id」等,返回的結果為歌曲相關的信息,其中最重要的是 「answer」(紅圈部分)。

另一個是 「發送猜歌請求」,如下:

3d76f4ecf912b8ef5bc49cbf7e7b94be.png

這同樣是一個get請求,也包含了token等參數,還包含了提交的答案 「answer」和歌曲的 「sid」。通過返回的 「is_right」字段便可以判斷是否猜對。(1則猜對,否則不對)

那么,思路已經很明晰了:通過python編寫程序,首先獲取歌曲的答案,然后將答案提交。

二、獲取答案

首先定義一個類:

classguessStar:

def__init__(self,token,userId):

'''

初始化函數

'''

self.token = token # 用戶token

self.userId = userId # 用戶ID

隨后,根據抓包的請求定義一個獲取答案的函數:

defget_answer(self):

'''

獲取答案函數

'''

url = 'https://api.zuiqiangyingyu.net/index.php/api/guess_v2/Index'

headers = { 'Connection': 'keep-alive',

'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.143 Safari/537.36 MicroMessenger/7.0.9.501 NetType/WIFI MiniProgramEnv/Windows WindowsWechat',

'content-type': 'application/json',

'Accept-Encoding': 'gzip, deflate, br'}

params = (( 'token',self.token), # 用戶token,需要換成自己的

( 'user_id',self.userId), # 用戶ID,需要換成自己的

( 'wechat_type', 'wechat_song'))

res = requests.get(url,headers=headers,params=params) # 發送請求

data = res.json # 獲取返回結果(json格式)

music = data[ 'd'][ 'list'][ 0] # 音樂數據

sid = music[ 'id'] # 音樂ID

answer = music[ 'answer'] # 對應的答案

return(sid,answer)

這個請求很簡單,只需要將數據包對于的url、參數、請求頭等模擬出來即可。

三、提交答案

同樣,通過抓包分析后定義一個提交答案的函數:

defguess(self,sid,answer):

'''

猜歌函數

'''

url= 'https://api.zuiqiangyingyu.net/index.php/api/guess_v2/Sub'

headers = { 'Connection': 'keep-alive',

'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.143 Safari/537.36 MicroMessenger/7.0.9.501 NetType/WIFI MiniProgramEnv/Windows WindowsWechat',

'content-type': 'application/json',

'Accept-Encoding': 'gzip, deflate, br'}

params = (( 'token',self.token), # 用戶token,需要換成自己的

( 'user_id',self.userId), # 用戶ID,需要換成自己的

( 'sid',sid), # 音樂ID

( 'answer',answer), # 答案

( 'wechat_type', 'wechat_song'))

res = requests.get(url,headers=headers,params=params)

result = res.json[ 'd'][ 'user'][ 'is_right'] # 猜歌的結果

returnresult

函數返回的是is_right字段,如果是1則表示答案正確,否則則是錯誤的。

四、猜猜猜

有了get_answer和guess函數,我們便可愉快地開始自動化猜歌答題了,定義如下函數:

defdo_guess(self,num):

'''

進行猜歌(通過num指定次數)

'''

N = 0

whileTrue:

sid,answer = self.get_answer

result = self.guess(sid,answer)

ifresult == '1': # 如果猜對

N += 1

print( '第%s首歌回答正確!'%sid)

else:

print( '第%s首歌回答錯誤!'%sid)

ifN >= num: # 如果達到指定次數

break

其中num參數表示猜歌的次數。在主函數中調用它:

if__name__ == '__main__':

star = guessStar( 'xxxx', 'xxx')

star.do_guess( 1001) # 開始猜歌

xxxx分別表示賬號的token和用戶ID,這里需要大家換成自己的。所謂 「一千零一夜」,于是我也跑1001次好了,run一下:

3c34adcb8c430c04061ed700447c5cbf.png

在運行之前,我是這樣的:

3b4cffb6718fae9beba6f3d1f835a2da.png

運行之后,我是這樣的:

c9b1b6cff17653e2ecc1dfa4a321e84c.png

沒有錯,我的排名正在噌噌噌地往上升!!舒服了~~

寫在最后

我想本篇文章的真正意義可能不在于代碼本身,而是希望為大家提供更加廣泛的思路:

Python不僅是課堂上紛繁復雜的理論知識,還能為我們的生活提供便利;

Python不僅是項目中枯燥無味的日復一日,還能為我們的生活帶來歡;

Python不僅是成長里孜孜不倦的埋頭苦學,還能為我們的生活增添成就;

無論是Python、Java、C#,乃至攝影、繪畫。whatever,它們都是我們興趣或是謀生的技能。我想,只有真正的 「熱愛它們」,它們也才能在我們的生活中更好地結出盛果、生根發芽!

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/529389.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/529389.shtml
英文地址,請注明出處:http://en.pswp.cn/news/529389.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

java調用oracle存儲過程_做一點,記一點 ~ Java調用Oracle存儲過程

一、需求傳入一個參數,返回一條或多條記錄(列表)。二、實現步驟1. 編寫Oracle存儲過程。-- 聲明包和包體的語句應該分兩次執行,即使聲明在前定義在后,如果一起執行依然會編譯出錯--調用能夠返回多條記錄的存儲過程需要定義在包內--聲明包及包…

java 從控制臺讀取_轉載 java從控制臺讀取輸入的方法

import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.Scanner; public class MainClass { public static void method1() { //使用Scanner Scanner scannernew Sca…

trace java_使用java動態字節碼技術簡單實現arthas的trace功能。

參考資料用過[Arthas]的都知道,Arthas是alibaba開源的一個非常強大的Java診斷工具。不管是線上還是線下,我們都可以用Arthas分析程序的線程狀態、查看jvm的實時運行狀態、打印方法的出入參和返回類型、收集方法中每個代碼塊耗時,甚至可以監控…

順時針小球圓周運動Java編程_如何使用CSS實現圓周運動小球的實例

我們時常在頁面中見到一些動畫效果,這些動畫效果,很多可以僅通過CSS來實現。在這里我們用到了CSS3的animation屬性。animation 屬性是一個簡寫屬性,用于設置六個動畫屬性:animation-name 規定需要綁定到選擇器的 keyframe 名稱。a…

java swing 外觀框架_【GUI】一、Swing外觀框架BeautyEye使用

一、Swing外觀框架BeautyEye使用1.1 導包1.2 使用BeautyEye L&Fpublic static void main(String[] args) {EventQueue.invokeLater(new Runnable() {public void run() {// 國人牛逼主題,值得學習// 初始化字體InitGlobalFont(new Font("微軟雅黑", F…

static詳解java_java中static作用詳解

static表示“全局”或者“靜態”的意思,用來修飾成員變量和成員方法,也可以形成靜態static代碼塊,但是Java語言中沒有全局變量的概念。被static修飾的成員變量和成員方法獨立于該類的任何對象。也就是說,它不依賴類特定的實例&…

java基礎案例教程前4章知識點_java學習記錄4 Java基礎知識點

java學習記錄4 Java基礎知識點1. 注釋單行注釋使用“//”開頭,后面是注釋的內容一般在要注釋的語句的上面加注釋多行注釋以“/*”開頭,以“*/”結尾可以做行內注釋不可嵌套使用文檔注釋以“/**”開頭,以“*/”結尾用來給類和方法做注釋&#…

打印狗的健康值Java_嵌入式狗的JAVA之路 HTML 補課

學了JAVA WEB應用,補充一下HTML的標簽,常用的,不然頁面都畫不出來了~~test 標題,h1h2h3 3個字號test 段落link 鏈接 使用 Target 屬性,你可以定義被鏈接的文檔在何處顯示。下面的這行會在新窗口打開文檔:Vi…

mysql 表2符合表1_MYSQL-表1和表2中所有可能性的所有行

表用戶id, name1, Jay Bob2, An Other表格頁id, name, html1, Welcome, Welcome to this page2, Goodbye, Thanks for visiting表user_pages **存儲頁面的用戶特定版本**user_id, page_id, html1, 1, User id 1 Welcome page我基本上需要一個查詢,該查詢將為我返回以下數據集-即…

java引擎組件_Java 腳本引擎入門

Java Script EngineJava 腳本引擎可以將腳本嵌入Java代碼中,可以自定義和擴展Java應用程序,自JDK1.6被引入,基于Rhino引擎,JDK1.8后使用Nashorn引擎,支持ECMAScript 5,但后期還可能會換。腳本引擎包位于jav…

python 角度傳感器模擬_python樹莓派紅外反射傳感器

本文實例為大家分享了python樹莓派紅外反射傳感器的程序,供大家參考,具體內容如下1、工具rpi3,微雪ARPI600,Infrared Reflective Sensor2、基本原理Infrared Reflective Sensor 輸出數字和模擬信號模擬信號通過ARPI600上的AD轉換芯…

JAVA awt eventqueue_線程“AWT-EventQueue-1”中的異常java.lang.NullPointerException

嗨,我收到錯誤Exception in thread "AWT-EventQueue-1" java.lang.NullPointerExceptionat P6.itemStateChanged(P6.java:215)at javax.swing.AbstractButton.fireItemStateChanged(AbstractButton.java:2023)at javax.swing.AbstractButton$Handler.item…

java構造方法賦值內存圖_java 面向對象(九):類的結構:構造器(一)簡介;屬性賦值順序;JavaBean的概念...

1.構造器(或構造方法):Constructor構造器的作用:* 1.創建對象* 2.初始化對象的信息2.使用說明:* 1.如果沒顯式的定義類的構造器的話,則系統默認提供一個空參的構造器* 2.定義構造器的格式:權限修飾符 類名(形參列表){}…

java 集合modcount_源碼|jdk源碼之LinkedList與modCount字段

鏈表是對上一篇博文所說的順序表的一種實現。與ArrayList思路截然不同,鏈表的實現思路是:不同元素實際上是存儲在離散的內存空間中的。每一個元素都有一個指針指向下一個元素,這樣整個離散的空間就被“串”成了一個有順序的表。從鏈表的概念來…

idea 新建ssm java ee_IDEA搭建SSM項目實現增刪改查

首先打開IDEA,File—>New—>Project創建項目選擇左側導航欄里的Maven,勾上勾,選擇webapp按如下圖進行填寫創建完成后進入項目,右下角彈出的提示點擊右邊的Enable Auto-Import,自動配置連接數據庫,我用…

php mail centos_centos怎么發送郵件

一、安裝sendmail與mail1、安裝sendmail:1) centos下可以安裝命令:yum -y install sendmail2) 安裝完后啟動sendmail命令:service sendmail start2、安裝mail安裝命令:yum install -y mailx二、發送郵件1、通過文件內容發送發送命…

php文件的作用,php入口文件的作用-PHP問題

php入口文件的作用php入口文件能夠完成主動加載性能。解析PHP入口文件的主動加載性能php的主動加載:正在php5之前,咱們要用某個類或類的辦法,那必需include或許require,之后能力應用,每一次用一個類,都需求…

emacs php 配置文件,如何配置emacs進行正確的PHP開發?

我使用web模式(http://web-mode.org/)混合HTML / PHP文件和php模式為純PHP文件.最新版本的php-mode還推薦使用混合HTML / PHP文件的Web模式:https://github.com/ejmr/php-mode#avoid-html-template-compatibility.不同于其他模式,如mmm模式,mumamo或多網絡模式,嘗試…

php 5.3.9 漏洞,PHP-5.3.9遠程執行任意代碼漏洞(CVE-2012-0830) 詳解

這個新的修復方法初衷是好的, 但是卻帶來一個嚴重的問題(5.3.10中已經修復), 這個問題最初是由Stefan Esser發現的. 請看之前(5.3.9)最終的修復方案(php_register_variable_ex):代碼如下while (1) {if (zend_symtable_find(symtable1, escaped_index, index_len 1, (void **) …

java中隨機數邊界問題,java 簡單Dice問題(隨機數的運用)

[java]代碼庫/*** Dice Write a program that simulates rolling two dice using the following* steps: 1. Prompt the user for the number of sides for two dice. 2. “Roll” the* dice three times by generating a random number between 1 (inclusive) and the* number…