1. 程式人生 > >微信小程式-獲取QQ音樂直鏈

微信小程式-獲取QQ音樂直鏈

獲取QQ音樂直鏈-用於微信小程式

補充:以下方法獲取的直鏈會有失效期,如果大家有嗅探等工具可以直接上QQ音樂網站獲取資源的直鏈,此方法僅供參考。

問題起源:

最近在做小程式音訊播放這一塊的時候發現一個問題,就是微信官方提供的那首歌曲 此時此刻-許巍 真的好難聽!測試元件的過程中聽了強忍著聽了無數遍。最終終於忍不下去決定要改變一下,但是從哪獲取其他音訊呢(除了從自己後臺)。只能從網上了,呼叫QQ音樂,網易雲音樂API等。但是考慮到這是微信小程式,所以保險還是選擇呼叫QQ音樂(畢竟是一家的~)。可是隨後卻發現想呼叫QQ音樂APi並沒有自己想的那麼簡單。網上也沒有找到一份像樣的教程。最後再經過一陣摸索之後,自己終於還是實現了這個功能,這裡記下過程,希望能給到大家幫助!!
 "http://ws.stream.qqmusic.qq.com/
 M500001VfvsJ21xFqb.mp3?
 guid=ffffffff82def4af4b12b3cd9337d5e7&uin=346897220&vkey=6292F51E1E384E061FF02C31F716658E5C81F5594D561F2E88B854E81CAAB7806D5E4F103E55D33C16F3FAC506D1AB172DE8600B37E43FAD&fromtag=46

分析官方提供的API:

  • 這裡我們觀察微信小程式官方提供的API呼叫介面可以看到介面構造為:
  1. http://ws.stream.qqmusic.qq.com/
  2. M500001VfvsJ21xFqb.mp3?
  3. 一串亂七八糟的東西

分析

  • 首先第一部分:大概是域名我們不用看,後面直接用。後面的亂七八糟的東西但是跟在**?**後面,大概是引數,也不管。中間部分看起來像是ID類似的東西,我們這裡猜測中間部分大概就是不同音樂的ID標識欄位了。

開始動手

  • 想要呼叫QQ音樂的API,首先我們的思路肯定是從網站上查有沒有提供的官方API。
    005TIiBMgy1fuzsvyxryvj317m0ma79x.jpg

  • 好像是有,我們點進去看看

005TIiBMgy1fuzsy50tozj31ok12sqbv.jpg

  • 裡面有一堆說明和方法,並且也沒有導航欄和明確點的解釋,看起來很費勁(內心感覺QQ音樂官方並不太想讓大家呼叫)。如果這樣下去的話估計想寫出一個正確的API需要把文件看的差不多才行,太浪費時間!這個方法,暫時PASS掉,留著保底用。

思考

  • 接下來怎麼辦呢,我們來想一下,既然官方提供的API把標識欄位直接寫到URL裡面,那麼說明其他音樂的請求裡面可能也是包含這一些欄位的,我們可以試著去通過分析他的網路請求去找看有沒有這些資訊。

  • 既然這樣的話我們就去試試,首先開啟QQ音樂線上網站:

005TIiBMgy1fuzt5wy4u9j317m0doad5.jpg

  • 輸入我們想找的歌曲名並搜尋

005TIiBMgy1fuzt6limc7j31u20j2n6j.jpg

  • 找到歌曲點播放(有的網頁可能會彈不出播放頁面,這個原因是瀏覽器的設定問題,在瀏覽器 設定->高階設定->內容設定->彈出式視窗和重定向 選成允許
    005TIiBMgy1fuzta0dmzxj31pg0b4gny.jpg

  • 然後彈出播放頁面:

005TIiBMgy1fuzta0lx1qj31a20i0af2.jpg

  • 這時候我們開啟開發者工具(WINDOWS快捷鍵為F12 mac為option+command+J)

005TIiBMgy1fuztkr8acrj31mq0ji7bn.jpg

  • 剛開啟裡面可能會有一些連結,也可能沒有,不管,我們這裡為了防止干擾先清空資料

005TIiBMgy1fuztkriq4vj31qm0g6tei.jpg

  • 獲得空白頁面

005TIiBMgy1fuzta0w4m7j31kg0tatdr.jpg

  • 然後我們重新整理頁面,獲取一次完整的網路請求,這一步很重要,因為想要分析他的網路請求,就必須要要獲取這個頁面完整的請求,防止漏掉請求

005TIiBMgy1fuztokmb00j30ku0eeta6.jpg

  • 然後獲取了完整的一次請求:

005TIiBMgy1fuzta18za3j31oi0qydu7.jpg

  • 這麼多的請求看的人眼花繚亂,到底哪些才是我們需要的資料呢。這裡我們想一下既然這個請求返回的是音樂流,那麼他肯定是比較大的,我們這裡看一下哪些請求的Size是最大的

005TIiBMgy1fuztslqxjtj31qm0rowq8.jpg

  • 其他的Size大部分是幾百b或者幾十k,這個有1.2M,看起來應該是最大的,我們點開這個請求看有沒有我們想要的東西。

005TIiBMgy1fuzta1mv9dj31qk0t2dw4.jpg

  • 咱們看他的請求頭裡面的資訊:
http://isure.stream.qqmusic.qq.com/C4000029cBQ71C3Gba.m4a?`vkey=E7883557BF711B8996C99307A0E507E1F76B9D5C4CEDF616BD2FE703352655414F5C36DD5C87F856274C6A235214F9143716E2AF50394308&guid=6578063259&uin=76812328&fromtag=66`
  • 這裡URL我們也可以分三部分,第一部分
  1. http://isure.stream.qqmusic.qq.com/
  2. C4000029cBQ71C3Gba.m4a?
  3. vkey=E7883557BF711B8996C99307A0E507E1F76B9D5C4CEDF616BD2FE703352655414F5C36DD5C87F856274C6A235214F9143716E2AF50394308&guid=6578063259&uin=76812328&fromtag=66
  • 我們在對比一下之前微信官方提供的API:
  1. http://ws.stream.qqmusic.qq.com/
  2. M500001VfvsJ21xFqb.mp3?
  3. guid=ffffffff82def4af4b12b3cd9337d5e7&uin=346897220&vkey=6292F51E1E384E061FF02C31F716658E5C81F5594D561F2E88B854E81CAAB7806D5E4F103E55D33C16F3FAC506D1AB172DE8600B37E43FAD&fromtag=46
  • 驚喜的發現他們除了域名之外其他部分驚人的相似,我們這裡基本就可以確定域名後面跟的那些就是一個音樂的唯一標識和類ID欄位了。不過這還不夠,我們還沒有得到最後的答案,接下來我們開始求證我們的想法!

  1. 我們使用官方API的域名,後面加我們通過 main titles 歌曲解析出來的 類ID欄位和引數。 拼成一個新的URL路徑
  2. 這裡也可不拼,本人嘗試過直接使用直鏈放入微信小程式中,也可以訪問
http://ws.stream.qqmusic.qq.com/C4000029cBQ71C3Gba.m4a?vkey=9EB978F0CFD9A7C738E46540141FDE66721FECC8F4F0727938978D9A6074FDA7A09935A44413BFBF04DD1447312044B93CE4058E0D3069E6&guid=6578063259&uin=76812328&fromtag=66
  1. **這裡我們先測試一下URL是否有效,開啟postman,輸入URL,回車

005TIiBMgy1fuzu945gw8j325k18kzvg.jpg

  1. 介面的測試沒有問題,終於大功告成了!!可以開香檳慶祝了嗎? 不對!! 我們還少了關鍵的一步,我們的最終目的是在微信小程式中引用這個音樂,所以最後我們還要在小程式中測試一下

  2. 開啟微信小程式,替換原來官方提供的API

005TIiBMgy1fuzudpcvbpj31a6094q6i.jpg

  1. 編譯執行

005TIiBMgy1fuzufj10mrj30zy09o78n.jpg

執行沒問題!可以播放,終於大功告成!這個簡單的小案例加深了我對呼叫API的理解,同時也深刻的理解編碼的過程中多思考,遇到陌生的情況,我們要冷靜多思考。

最後,

文中如有錯誤或問題請大家指正,

感謝閱讀!

相關推薦

程式-獲取QQ音樂直鏈

獲取QQ音樂直鏈-用於微信小程式 補充:以下方法獲取的直鏈會有失效期,如果大家有嗅探等工具可以直接上QQ音樂網站獲取資源的直鏈,此方法僅供參考。 問題起源: 最近在做小程式音訊播放這一塊的時候發現一個問題,就是微信官方提供的那首歌曲 此時此刻-許巍 真的好

程式呼叫qq音樂API介面

2018年11月14日 15:23:10 LC_cat 閱讀數:8 標籤: 小程式

程式 獲取標籤裡面的自定義資料

<view wx:for="{{receiverlist}}" wx:for-item="receiver" wx:key="" wx:for-index="idx"> <input type='number' value='{{salesNumber}}' data-na

程式獲取openid返回40029的一種錯誤情況

微信小程式返回40029的情況原因有很多,遇到後大概總結了幾個已知的 1.小程式裡傳到後臺的code被微信的呼叫介面使用了兩次(只能使用一次) 2.appid、AppSecret的值不對(這個自己複製感覺一般不會錯) 3.自己遇到的最難受的原因:建立專案的appid跟你請求url裡的ap

解決 程式獲取使用者資訊時彈框不顯示的問題

在開發中碰到使用者點選按鈕獲取使用者資訊時,彈框出不來的情況 wxml: <button class='btn' bindgetuserinfo="loginClick" open-type="getUserInfo">請授權</button> js: l

程式 - 獲取所在位置(省、市、區)

    實現步驟 1. 獲取當前經緯度   2. 呼叫騰訊(百度、高德)地圖對應的請求地址,一般都會有獨一的key, 譬如   騰訊地圖呼叫地址: https://apis.map.qq.com/ws/geocoder/v1/?l

程式獲取經緯度

1、在index.wxml檔案建立如下程式碼,longitude,latitude為以獲取經緯度為地圖中心,獲取當前位置經緯度資訊 <view>緯度:{{latitude}}</view> <view>經度:{{longitude}}</view&g

程式獲取使用者位置以及城市

做小程式的時候,有需要維護使用者地理位置的地方,這時如果可以自動獲取當前位置,對於提升使用者體驗有很大的幫助,然後檢視官方文件,有個wx.getLocation介面,詳細說明如下: wx.getLocation(Object object) 呼叫前需要 使用者授權 

程式 獲取元素高度(獲取元素節點資訊)

微信小程式 獲取元素高度(獲取元素節點資訊)   如果高度要px單位的話: let query = wx.createSelectorQuery(); query.select('.content').boundingClientRect(rect=>{ let he

程式-獲取使用者資訊-前端寫法

開發微信小程式,前提是申請到一個 appId 並拿到 appSecret ,並在微信公眾平臺配置好小程式對應的伺服器域名。 小程式可以通過兩種方式獲取到使用者資訊,並且獲取到資訊之後,推薦直接存到小程式的全域性變數中,後續直接在全域性變數中讀取,無需在重新獲取。 方法一: 使用 appI

程式-獲取使用者資訊-後端寫法

之前介紹了兩種小程式獲取使用者資訊的寫法,其中第二種需要後端配合完成。 後端我使用了一個第三方的 jar 包: 我使用的是 2.9.6.BETA 版本。 這個版本提供了通過微信引數解析使用者資訊的方法,只要在配置檔案中把微信小程式的資訊配置完成就可以直接使用,非常方便。

程式獲取cookie以及設定cookie

小程式開發中我們需要獲取到後端給的cookie進行請求驗證,但是微信並沒有幫我們儲存cookie,那麼我們要維持會話需要自己來儲存cookie,並且請求的時候加上cookie 1.獲取cookie 在登入請求後讀取 返回值的, header的cookie,並本地儲存 //登入請求回來

程式獲取input輸入框的值

微信小程式獲取input輸入框的值 作者: 輕酌~淺醉 參考:ralStyle貴 官方文件 1,form表單獲取 wxml程式碼 <view class='box'> <form bindsubmit='searchBox'>

程式--獲取已釋出遊戲和程式原始碼

最近一直在做微信小遊戲的開發,發現了一個好玩的事 ,在這裡記錄一下。 這段時間一直在做一些小遊戲 ,小程式的開發,但有的時候會發現效能上總是不那麼的盡如人意(畢竟我這小菜鳥水平有限),於是就想到,想要看看別的大神們是怎麼處理這些問題的(其實就是想看一下大神們的程式碼怎麼寫!)。但是,有一個問題就

關於程式獲取使用者openid的問題

1.個人開發者是獲取不到OpenId:之前測試一直拿不到,讀者可以試一下。 2.獲取的程式碼和輸出: //app.js App({ globalData: { appid: 'wx62a1hh8cfc28fdb',//appid需自己提供,此處的appid我隨機編寫 secr

程式獲取手機驗證碼

一種比較常見的功能獲取手機驗證碼 先看效果圖:     其實這個功能實現起來很簡單,主要就是調取第三方介面,拿到返回值驗證的問題 直接上程式碼吧: wxml頁面: <view class='changeInfo'> <view class='ch

程式——獲取當前頁面路由

getCurrentPages() 函式用於獲取當前頁面棧的例項,以陣列形式按棧的順序給出,第一個元素為首頁,最後一個元素為當前頁面。 let pages = getCurrentPages(); let currPage = null; if (pages.length) {

程式獲取表單初始值,提交改變過的資料

 form表單,通過onload(options)獲取的引數給輸入框賦值,提交改變後的引數 <form bindsubmit="submitForm"> <view class='item'> <view class='label'>聯絡

程式 獲取 open-id --- SpringBoot

1.Pom.xml加入依賴 <dependency> <groupId>com.github.binarywang</groupId> <artifactId>w

程式獲取UnionID機制和出現的問題

前段時間做了一個小程式的專案,在小程式支付的時候出現了一個問題,導致小程式稽核不通過,稽核不通過的原因說是虛擬支付,出現這個問題的原因是因為微信小程式的支付IOS是不能支付的,所以就不能通過,這個時候我們就出了一套方案就是在小程式中IOS使用者是不能進行支付產品