このコードの実装アイデア:
WeChat はインターフェイスを提供しており、データ形式がインターフェイスの XML 形式を満たしている限り、対応する音楽をフォロワーに送信できます
1. WeChat が提供する XML 形式で音楽メッセージを構築します
音楽 XML 形式:
-
- FromUserName>
- 12345678
-
- タイトル>
- 説明>
- MusicUrl>
- /音楽>
-
-
-
- コードをコピー
-
-
データをこの形式に変換する関数を作成します。主なデータは MusicUrl と HQMusicUrl のデータです。前者は通常の品質の音楽で、後者は高品質です。品質、次回は Wi-Fi HQ が最初に再生されます。
プライベート関数transmitMusic($object, $musicArray, $flag = 0){ $itemTpl = "
- 説明>
-
-
-
"; $item_str = sprintf($itemTpl, $musicArray['タイトル'], $musicArray['説明'], $musicArray['MusicUrl'], $musicArray['HQMusicUrl']);
$textTpl = " > ;
%s
$item_str
%d
";
$resultStr = sprintf($textTpl, $object->FromUserName, $object->ToUserName, time(), $flag);
return $resultStr;
}
コードをコピー
2、構築パラメータ$musicArray
$musicArray = array("タイトル"=>$songstr, "説明"=>"歌手:".$singerstr, "MusicUrl"=>$this->getMusicUrl($this- >getMusic($songstr,$singerstr)),"HQMusicUrl"=>$this->getHQMusicUrl($this->getMusic($songstr,$singerstr)));
コードをコピー-
-
どこ$songstr 変数と $singerstr 変数は、フォロワーのテキストから受け取る必要があります。まず、特定の形式に従ってテキストを入力するようにフォロワーに通知し、次にこの固定形式に従って曲のアーティスト名を安全に取得します。これを達成するのは難しくありません
これは私が書いたものです。$keyword はユーザーが入力した内容です。形式は音楽 + 曲のタイトルと歌手です。たとえば、音楽は冬の Qi Qin に関するものです。と歌手はスペースで区切られます。
$aa = substr($keyword,strpos($keyword,"Music")+strlen("Music"));//1 つの漢字に対して 2 桁$song = substr($aa,0 、strpos($aa," ")); $singer = substr($aa,strpos($aa," ")); $songstr = トリム((文字列)$song);- $singerstr = トリム(( string )$singer);
- $musicArray = array("Title"=>$songstr, "Description"=>"Singer:".$singerstr, "MusicUrl"=>$this->getMusicUrl($this - >getMusic($songstr,$singerstr)),"HQMusicUrl"=>$this->getHQMusicUrl($this->getMusic($songstr,$singerstr)));
- $resultStr = $this-> ; transferMusic($object, $musicArray, $funcFlag);
-
-
- コードをコピー
-
-
w3c にアクセスして、文字列インターセプトの特定の関数の使用方法を確認できます。ここでは、主なことは MusicUrl と HQMusicUrl の内容を取得することです。
百度音楽インターフェース http://box.zhangmen.baidu.com/x?op = 12&count=1&title=TITLE $$AUTHOR$$$$
ブラウザに http://box.zhangmen.baidu.com/x?op=12&count=1&title=About Winter$$Qiqin$$$$ と入力して、インターフェイスによって提供される XML データの内容を確認します。主にエンコードとデコード内のデータは、内部の CDATA の内容、つまり &mid=0.74155984312224 まで取得されますが、この部分は必要ありません。再生できません。結合されたデータは、必須の MusicUrl と HQMusicUrl です。
3、以下が重要なポイントです。PHP を使用して XML データを解析します
PHPの構文が理解できなかったので、かなりの時間を費やしました
-
//ミュージック・オン・デマンド
- function read_child($node)
- {
- global $musicstr ;
- $children = $node->childNodes; // $node のすべての子ノードを取得します。
- foreach($children as $e) //各子ノードを読み取るループ
- {
- /*if($e->nodeType == XML_TEXT_NODE) //子ノードがテキスト型の場合は出力
- {
- echo $e ->nodeValue."---------"."
"
- }*/
- if($e->nodeType == XML_ELEMENT_NODE&&$e->nodeName= ='encode ') //子ノードがテキスト型の場合は出力
- {
- $musicstr.=$e->nodeValue
- }
- if($e->nodeType == XML_ELEMENT_NODE&&$e->nodeName; =='decode ') //子ノードがテキスト型の場合は出力
- {
- $musicstr.=$e->nodeValue."|"
- }
- if($e->nodeType == XML_ELEMENT_NODE) //子ノードの場合は、関数
- {
- $this->read_child($e); // ここで、これらのメソッドはすべて $this-> で記述されていることに注意してください。 WeChat の wechatCallbackapiTest クラスなので、これらの関数を呼び出すために追加する必要があります。
- }
- }
- return $musicstr ;
- }
function getMusic($song,$singer)
- {
- $dom = new DomDocument() // DOM オブジェクトを作成します
- $dom- >load('http://box.zhangmen.baidu.com/x?op=12&count=1&title='.$song.'$$'.$singer.'$$$$'); // XML を読み取るfile
- $root = $dom->documentElement; //XML データのルートを取得します
- return $this->read_child($root);
- //return $b; //read_child 関数を呼び出してルートを読み取りますobject
- }
- function getMusicUrl($url)
- {
- // echo strpos($url,"&")."musciURL";
- return substr($url,0,strpos($url,"&"));
- }
- function getHQMusicUrl($url)
- {
- //echo strripos($url,"&")."HQmusicURL";
- return substr($url,strripos($url,"http"),strripos($url ," &")-strripos($url,"http"));
- }
-
-
コードをコピー
DOMで作成しました、Baiduは他の人に尋ねることを知っています。もちろん、XML データ内の MusicUrl を取得するより良い方法があります。
- xml = file_get_contents('http://box.zhangmen.baidu.com/x?op=12&count=1&title=冬について$$Qiqin$$$$');
- $result = simplexml_load_string ($ xml);
- echo strval($result->url->encode);
- echo strval($result->url->decode);
- //出力: http://zhangmenshiting.baidu. data2/music/64380827/Z2ZmbGVuaW9fn6NndK6ap5WXcGVpZpuaZJdrbGtqmm1mY2lolppnmpSXZWZubZyclmlmmZaXa3
- CTZJeZmW1ncGVll1qin5t1YWBmbGxsamxlaGVrbG9taTE$
- 643 80827.mp3?xcode=140db3e8864c55164ad0bce2297ede73eaa48b2ded70843d&mid=0.38763446277961
-
コードをコピーします
効果の画像は次のとおりです:
|