이 코드의 구현 아이디어:
WeChat은 데이터 형식이 제공하는 인터페이스의 XML 형식을 충족하는 한 해당 음악을 팔로워에게 보낼 수 있습니다
1. WeChat에서 제공하는 XML 형식으로 음악 메시지를 구성합니다.
음악 XML 형식:
-
-
-
- 12345678 >
- 제목>
- ; ;
-
- HQMusicUrl>
-
-
-
- 코드 복사
-
데이터를 이 형식으로 변환하는 함수를 작성하세요. 주요 데이터는 MusicUrl 및 HQMusicUrl의 데이터이며, 후자는 Wi-Fi 상태입니다. HQ 플레이를 우선시하세요.
비공개 함수 submitMusic($object, $musicArray, $flag = 0) { $itemTpl = "- 제목>
- 설명>
- < ;MusicUrl>
-
- 음악>";
- $item_str = sprintf($itemTpl, $musicArray['Title'], $musicArray['Description'], $musicArray['MusicUrl'], $musicArray['HQMusicUrl']);
- $textTpl = "
-
-
- %s
-
- $item_str
- %d
-
";
- $resultStr = sprintf($textTpl, $object->FromUserName, $object->ToUserName, time(), $flag);
- return $resultStr;
- }
-
-
- 코드 복사
2, 구성 매개변수 $musicArray
$musicArray = array("Title"=>$songstr, "Description"=>"Singer:".$singerstr, "MusicUrl"= >$this->getMusicUrl($this->getMusic($songstr,$singerstr)),"HQMusicUrl"=>$this->getHQMusicUrl($this->getMusic($songstr,$singerstr) )); $songstr 및 $singerstr 변수는 팔로어로부터 텍스트를 수신해야 합니다. 먼저 팔로어에게 특정 형식의 텍스트, An을 입력하도록 상기시킵니다. 란은 이 정해진 형식에 따라 가수의 이름을 가로챕니다. 이는 달성하기 어렵지 않습니다
이것이 제가 작성한 것입니다. $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 = Trim((string)$song);
- $singerstr = Trim((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->transmitMusic($object, $musicArray, $funcFlag);
-
-
- 코드 복사
-
특정 문자열 차단 기능 사용법은 w3c에서 확인할 수 있습니다. 자세한 내용은 다루지 않겠습니다. 가장 중요한 것은 MusicUrl 및 HQMusicUrl의 콘텐츠를 얻는 것입니다.
Baidu 음악 인터페이스 http://box.zhangmen.baidu.com/x?op = 12&count=1&title=TITLE $$AUTHOR$$$$
인터페이스에서 제공하는 XML 데이터의 내용을 관찰하려면 주로 인코딩 및 이 두 데이터는 서로 연결되어 있습니다. 내부의 CDATA 내용은 xcode의 끝 부분, 즉 &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') //sub인 경우 노드가 텍스트 유형인 경우
- {
- $musicstr.=$e->nodeValue."|"
- }
- if($e->nodeType = = XML_ELEMENT_NODE) //자식 노드가 노드 객체인 경우 처리 함수를 호출합니다.
- {
- $this->read_child($e) //여기서는 $this-> 이 메소드들은 모두 WeChatCallbackapiTest 클래스에 WeChat으로 작성되어 있기 때문에 이 함수를 호출하려면 이를 추가해야 합니다.
- }
- }
- 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 파일 읽기
- $root = $dom->documentElement; //XML 데이터의 루트 가져오기
- return $this->read_child($ root);
- //return $b; //read_child 함수를 호출하여 루트 객체를 읽습니다.
- }
- 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- > 디코드);
- //출력: http://zhangmenshiting.baidu.com/data2/music/64380827/Z2ZmbGVuaW9fn6NndK6ap5WXcGVpZpuaZJdrbGtqmm1mY2lolppnmpSXZWZubZyclmlmmZaXa3
- CTZJeZmW1ncG in5t1YWBmbGxsamxlaGVrbG9taTE$
- 64380827.mp3?xcode=140db3e8864c55164ad0bce2297ede73eaa48b2ded70843d&mid=0.38763446277961
코드 복사
렌더링은 다음과 같습니다.
|