採集練習(十) php 得到電視節目預告---數據來自搜視網

  前幾天逛湖南衛視,偶然間發現它的網站上也有節目預告,一看源碼,竟然是來自搜視網的xml,因而就想得到它的數據(頁面直接ajax加載估計會有跨域問題)php

前陣子也寫過另外一個方法得到 節目預告(採集練習(七) php 得到電視節目預告)。html

點開 金鷹網  導航上找到 電視劇  鼠標移上 電視劇 點擊裏面的 節目表 其實就 是這個連接 http://hunantv.tvsou.com/  數據來自搜視網ajax

在頁面上點擊 湖南衛視  發現有2個 ajax 請求  json

  1. XHR finished loading: http://hunantv.tvsou.com/pst/tv_24/ch_46/W6.xml  裏面是 是 湖南衛視 週六的 節目預告
  1. XHR finished loading: http://hunantv.tvsou.com/xml/ws.xml  裏面是地方衛視的xml列表

經過分析 http://hunantv.tvsou.com/xml/ws.xml 發現  tv_24 的 24 是 湖南衛視的id ;跨域

ch_4646 是湖南衛視的 tvid ,而W6   則是湖南衛視 週六的 節目預告數組

根據電視臺的 xml 就能夠得到相應的 節目預告了post

其他電視臺 節目預告也相似測試

遇到的問題: 相應電視臺的 id 在 xml 節點的屬性上,之前都是直接用 DOMDocument 類來讀取,此次嘗試用 simplexml 類來處理。網站

下面是我拿央視作測試的代碼 :url

<?php
/**
 * Created by JetBrains PhpStorm.
 * User: keygle
 * Date: 13-8-2
 * Time: 下午9:55
 * From: www.cnblogs.com/keygle
 */

/**
 * [getXml 讀取xml]
 * @param  [type] $url [xml url]
 * @return [type]      [description]
 */
function getXml($url){
	$xmlStr = @file_get_contents($url);
	$xmlObj = @simplexml_load_string($xmlStr);
	return $xmlObj;
}

/**
 * [generateTvArray 生成電視列表數組]
 * @param  [type] $tvUrl [xml 地址]
 * @return [type] $datas    [電視列表數組]
 */
function generateTvArray($tvUrl){
	$tvObject = getXml($tvUrl);	
	$datas = array();
	//得到Tv節點
	$tvNode = $tvObject->Tv;
	//遍歷節點 
	for($i=0;$i<$tvNode->count();$i++){
		//得到節點屬性 重組數組
		foreach ($tvNode[$i]->attributes() as $k=>$v){
			$datas[$i][$k] = (string)$v; //sim 對象轉爲 string 
			$channelNode = $tvNode[$i]->Channel;
			for($n=0;$n<$channelNode->count();$n++){
				$datas[$i]['channel'][$n]['name'] = strval($channelNode[$n]);
				foreach ($channelNode[$n]->attributes() as $key => $value) {
					$datas[$i]['channel'][$n][$key] = strval($value);
				}
			}
		}
	}
	return $datas;
}
/**
 * [getPlayItems 得到節目預告]
 * @param  [type] $playItemsUrl [xml 地址]
 * @return [type]               [array]
 */
function getPlayItems($playItemsUrl){
	$playItemsObject = getXml($playItemsUrl); 
	return json_decode(json_encode($playItemsObject),true); //將 simplexml 對象轉爲數組
}
//得到央視的 頻道列表
$tvUrl = "http://hunantv.tvsou.com/xml/ys.xml"; 
$tvListArray = generateTvArray($tvUrl);
print_r($tvListArray);
//得到 CCTV1 週六的節目預告
$playItemsUrl = "http://hunantv.tvsou.com/pst/tv_1/ch_1/W6.xml";
$playItemsArray = getPlayItems($playItemsUrl);
print_r($playItemsArray);

相關文章
相關標籤/搜索