1. 程式人生 > >通過QQ音樂介面,做的一個簡易微信小程式播放器

通過QQ音樂介面,做的一個簡易微信小程式播放器

剛接觸微信小程式開發,自己閒來無事做的一個音樂播放器。大概介紹一下其中使用的哪些東西。由於QQ音樂要求請求頭中必須包含Referer這個設定(Referer:代表你是從哪個頁面傳送的請求)才能正確的響應資料,然而微信小程式的網路請求wx.request規定不能在請求頭中設定Referer這裡寫圖片描述,所以導致不能直接從小程式中去呼叫QQ音樂的介面。為了解決這個問題,開始我想採用java來做一個後臺代理(就是給請求加上請求頭),但是考慮到一個原因,java的服務佔用記憶體比較大相對來說要重量一點。通過了解採用node.js來做這個功能再合適不過。於是就採用了node.js,搭建服務快,省去了java服務需要的很多配置。
node程式碼:

var express = require('express');
var request = require("request");
var app = express();

//獲取推薦歌單列表
app.get('/haicome/getQMusicSongSheet', function (req, res) {
    const url = "https://c.y.qq.com/splcloud/fcgi-bin/fcg_get_diss_by_tag.fcg?" +
        "picmid=1&rnd=0.9948304561071419&g_tk=5381&jsonpCallback=getPlaylist&loginUin=0"
+ "&hostUin=0&format=jsonp&inCharset=utf8&outCharset=utf-8&notice=0&platform=yqq&" + "needNewCode=0&categoryId=10000000&sortId=2&sin=0&ein=29" var options = { url: url, headers: { referer: 'https://y.qq.com/portal/playlist.html'
} }; request(options, function (error, response, body) { var jsonResult = body.substring(body.indexOf("(")+1,body.length-1); res.send(jsonResult); }) }); //獲取要播放的歌單的詳情 app.get('/haicome/getQMusicSongSheetDetail', function (req, res) { const dissid = req.query.dissid; const url = "https://c.y.qq.com/qzone/fcg-bin/fcg_ucc_getcdinfo_byids_cp.fcg?" + "type=1&json=1&utf8=1&onlysong=0&disstid="+dissid + "&format=jsonp&g_tk=5381&jsonpCallback=playlistinfoCallback&loginUin=0&hostUin=0&" + "format=jsonp&inCharset=utf8&outCharset=utf-8&notice=0&platform=yqq&needNewCode=0" var options = { url: url, headers: { referer: 'https://y.qq.com/portal/playlist.html' } }; request(options, function (error, response, body) { var jsonResult = body.substring(body.indexOf("(")+1,body.length-1); res.send(jsonResult); }) }); //獲取指定歌曲資訊 app.get('/haicome/getQMusicSongByAlbummid', function (req, res) { const albummid = req.query.albummid; const url = "https://c.y.qq.com/v8/fcg-bin/fcg_v8_album_info_cp.fcg?" + "albummid="+albummid + "&g_tk=5381&jsonpCallback=albuminfoCallback&loginUin=0&hostUin=0&" + "format=jsonp&inCharset=utf8&outCharset=utf-8&notice=0&platform=yqq&needNewCode=0" var options = { url: url, headers: { referer: 'https://y.qq.com/portal/playlist.html' } }; request(options, function (error, response, body) { var jsonResult = body.substring(body.indexOf("(")+1,body.length-1); res.send(jsonResult); }) }); //獲取指定歌曲vkey 這個vkey在獲取資源的時候需要使用 app.get('/haicome/getQMusicSongVkeyById', function (req, res) { const id = req.query.id; const url = "https://c.y.qq.com/base/fcgi-bin/fcg_music_express_mobile3.fcg?" + "g_tk=5381&jsonpCallback=MusicJsonCallback8307607419317575&loginUin=0&hostUin=0&" + "format=json&inCharset=utf8&outCharset=utf-8&notice=0&platform=yqq&needNewCode=0&" + "cid=205361747&callback=MusicJsonCallback8307607419317575&uin=0&songmid="+id+"&filename=C400"+id+".m4a&guid=890047478" var options = { url: url, headers: { referer: 'https://y.qq.com/portal/playlist.html' } }; request(options, function (error, response, body) { const result = JSON.stringify(body); const key = result.substring(result.indexOf("vkey")+9,result.length-8) ; res.send(key); }) }); //查詢歌單 app.get('/haicome/getQMusicSongSearchList', function (req, res) { var search = req.query.search; search = encodeURIComponent(search); console.log(search); const url = "https://c.y.qq.com/soso/fcgi-bin/client_music_search_songlist?" + "remoteplace=txt.yqq.playlist&searchid=111594735142470005&flag_qc=0&page_no=0&num_per_page=50" + "&query="+search + "&g_tk=5381&jsonpCallback=MusicJsonCallback321112164733657&loginUin=0&hostUin=0&format=jsonp" + "&inCharset=utf8&outCharset=utf-8&notice=0&platform=yqq&needNewCode=0" console.log(url); var options = { url: url, headers: { referer: 'https://y.qq.com/portal/playlist.html', contentType:'application/x-javascript;charset=utf-8', vary:'Accept-Encoding' } }; request(options, function (error, response, body) { var jsonResult = body.substring(body.indexOf("(")+1,body.length-1); console.log(jsonResult); res.send(jsonResult); }) }); app.listen(8088, function () { console.log('Example app listening on port 8088!'); });

相關推薦

通過QQ音樂介面一個簡易程式播放

剛接觸微信小程式開發,自己閒來無事做的一個音樂播放器。大概介紹一下其中使用的哪些東西。由於QQ音樂要求請求頭中必須包含Referer這個設定(Referer:代表你是從哪個頁面傳送的請求)才能正確的響應資料,然而微信小程式的網路請求wx.request規定不能在

編寫一個個人程式(安裝建立編寫執行)

一、微信小程式  微信公眾平臺    https://mp.weixin.qq.com/cgi-bin/wx 二、下載開發工具  https://developers.weixin.qq.com/miniprogram/dev/de

一週擼一個 GitHub 程式

掃碼體驗 宣告 眾所周知,GitHub 自己並沒有官方 App,更別說微信小程式了。本程式完全為第三方開發者開發,僅用於學習交流,禁止用於其他用途。若要使用正版,請使用 GitHub 網頁端。 該小程式所有 API 均來自 GitHub 官方提供的開發者 API 第三版,詳情請戳

多多客程式(doodoo)釋出 1.0基於 node vue 開發的程式系統

doodoo 多多小程式開源版 API介面檔案 server 環境需求node >= 8.0 mysql 配置檔案 .env # 應用配置 APP_PORT=3001 APP_HOST=http://127.0.0.1:3001 # 驗證碼 VERIFY_MAXIP=36 /

多多程式(doodoo)釋出1.0基於nodevue開發的程式系統

多多小程式(doodoo)釋出1.0,基於Doodoo.js -- 中文最佳實踐Node.js Web快速開發框架,支援Koa.js, Express.js中介軟體。包含多項功能改進,及Bug修復。 更新內容: 1.【新增】新增支援自研baas系統模組化開發(類似於小程式雲開發方式) 2.【新增】新

程式-從零開始製作一個跑步程式

一、準備工作 1、註冊一個小程式賬號,得用一個沒註冊過公眾號的郵箱註冊。 2、註冊過程中需要很多認證,有很多認證,比較繁瑣,如果暫時只是開發測試,不進行提審、釋出的話,只要完成營業執照號填寫就可以了,不需要完成微信認證。 3、註冊完賬號,登入,在主頁面左邊列表中點選設定,然後再

關於Android開源庫分享平臺(GitClub)程式的開發體驗

七八月份的深圳一直在下雨,總有人說雨天適合窩在家看書,對於程式開發者來說更是難得的學習機會。我們502工作室的小夥伴利用這個時間學習了一下微信小程式開發,並上線了一個GitClub小程式,目前功能有些簡陋,難免有辣眼之處,煩請各位大俠手下留情。鋪墊結束,請使用掃

簡易程式簽到功能

一、效果圖 點選簽到後 二、資料庫 用一張資料表存使用者簽到的資訊,每次使用者簽到都會往表中新增一條記錄了使用者id和簽到日期的資料,如下圖 三、後端 後端寫兩個介面,一個用於查詢使用者今日是否簽到和簽到記錄總數,一個用於新增使用者簽到資訊到資料庫。這裡

程式編輯支援wxss,支援wxml

寫小程式的時候,企鵝把結構表現層(html)的字尾名定義為wxml,把樣式層定義為wxss 然後寫起程式碼來就是這樣子。。 說好的標紅,高亮,自動提示,自動縮排呢?這怎麼寫,, 是的,目前還沒有支援wxml,wxss的編輯器,, 那就先寫html,css字尾吧,,最終

實戰:從零開始製作一個跑步程式

一、準備工作 首先註冊一個小程式賬號,得用一個沒註冊過公眾號的郵箱註冊。 註冊過程中需要很多認證,比較繁瑣。如果暫時只是開發測試,不進行提審、釋出的話,只要完成營業執照號的填寫就可以了,不需要完成微信認證。 註冊完賬號,並使用該帳號進行登入。 在主頁面左邊列表中點

PHP後臺實現程式登入

微信小程式登入 微信小程式官方給了十分詳細的登陸時序圖,當然為了安全著想,應該加上簽名加密。 微信小程式端 1).呼叫wx.login獲取 code 。 2).呼叫wx.getUserInfo獲取簽名所需的 rawData , signatr

藉助baidu的jsonp介面一個自己的候選片語件

先觀察 對介面進行提煉:https://sp0.baidu.com/5a1Fazu8AA54nxGko9WTAnF6hhy/su?wd=關鍵詞&cb=回撥函式 簡單測試一下: <!DOCTYPE html> <html> <head>

通過QQ音樂介面獲取資料+播放

//songList.js export function getDiscList() {     const url = '/api/getDiscList'     const data = Object.assign({}, commonParams, {      

程式呼叫qq音樂API介面

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

使用ArcGIS-JAVA-sdk一個arcgis的javademo

  在ArcGIS的官網上,你能找到arcgis-runtime-sdk-java-100.0.0,和arcgis-runtime-sdk-java-guide-100.0.0,前者是建立專案時所需要引入的一些庫,後者是使用指南。在指南中你會發現兩種方法做demo,如下圖

程式返回資料給上一介面

我們知道微信官方文件中教我們如何把當前介面的資料傳輸到要跳轉的下一介面中,那麼如何在下一介面返回當前介面時把資料返回來呢? 假設上一介面為A,對應的A.js中有一段這樣的程式碼: 頁面({ data:{ 物件:'', } }) 下一介面為B,對應的B.js中有這個方法:

用Jmeter程式專案介面測試【案例】

公司新專案組開發一款微信小程式電商平臺,為了更好保證產品質量,因此提出了需要進行介面測試。 從介面本身來講,對其測試與其他專案應該是一樣的。所以不難理解,我們要對小程式的介面測試需要準備的 材料有: 1、完備的介面文件(什麼是完備的介面文件,之前文章有寫到,這裡不再綴敘) 2、測試工

基於java的程式的實現(二)登入註冊登出介面的實現

1.開發工具以及相關環境的配置 1.首先關於IDE,前端小程式端採用的是微信官方的微信開發者工具,後端使用的是idea(idea是真的智慧,再也不想回去eclipse了呢),關於前端的一些程式碼,主要是參照微信官方的API進行開發的,整體的檔案結構也和js,css,html也很相似。

程式自動定位通過百度地圖根據經緯度獲取該地點所在城市資訊

微信小程式獲得經緯度 var that = this wx.getLocation({ type: 'wgs84', success(res) { console.log(res) that.setData({

程式自己一個自定義彈框

因為微信小程式的授權現在需要使用者點選按鈕才能呼叫授權介面,而小程式自帶的彈框的確認按鈕不能繫結bindtap或使用open-type屬性,所以打算自己寫一個自定義彈窗供大家方便使用... 成品: wxml <cover-view class='mask' w