采集练习(十) php 获得电视节目预告---数据来自搜视网
前几天逛湖南卫视,偶然间发现它的网站上也有节目预告,一看源码,居然是来自搜视网的xml,于是就想获得它的数据(页面直接ajax加载估计会有跨域问题)
前阵子也写过另一个方法获得 节目预告(采集练习(七) php 获得电视节目预告)。
点开金鹰网 导航上找到 电视剧 鼠标移上 电视剧 点击里面的 节目表 其实就 是这个链接 http://hunantv.tvsou.com/ 数据来自搜视网
在页面上点击 湖南卫视 发现有2个 ajax 请求
- XHR finished loading: http://hunantv.tvsou.com/pst/tv_24/ch_46/W6.xml 里面是 是 湖南卫视 周六的 节目预告
- XHR finished loading: http://hunantv.tvsou.com/xml/ws.xml 里面是地方卫视的xml列表
通过分析 http://hunantv.tvsou.com/xml/ws.xml 发现 tv_24 的 24 是 湖南卫视的id ;
ch_46的 46 是湖南卫视的 tvid ,而W6 则是湖南卫视 周六的 节目预告
根据电视台的 xml 就可以获得相应的 节目预告了
其余电视台 节目预告也类似
遇到的问题: 相应电视台的 id 在 xml 节点的属性上,以前都是直接用 DOMDocument 类来读取,这次尝试用 simplexml 类来处理。
下面是我拿央视做测试的代码 :
<?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);
采集练习(十) php 获得电视节目预告---数据来自搜视网的更多相关文章
- 采集练习(十一) php 获得电视节目预告---数据来自电视猫
昨天写了个采集搜视网的电视节目预告,刚好今天有心情,想采下其他网站提供的节目预告,发现 电视猫wap版 的提供的节目预告也蛮好采(需要正则)....感谢移动互联网! 电视猫的 wap版地址是 htt ...
- 使用GNU/Linux播放电视节目
目前,生活中很多事情都可以在电脑前完成,读书.写程序.听音乐.看视频等.如果也可以在电脑上收看有线电视节目的话,那就更好了.为此,我购买了圆刚视频采集卡AverMedia C725B.如下图所示. 官 ...
- HDU_2037——最多电视节目问题
Problem Description “今年暑假不AC?” “是的.” “那你干什么呢?” “看世界杯呀,笨蛋!” “@#$%^&*%...”确实如此,世界杯来了,球迷的节日也来了,估计很多 ...
- Ajax-08 跨域获取最新电视节目清单实例
目标一 请求江西网络广播电视台电视节目 URL:http://www.jxntv.cn/data/jmd-jxtv2.html 分析 1.从Http头信息分析得知,器服务端未返回响应头Access-C ...
- 安卓TV开发(十) 智能电视开发之在线视频直播
转载注明出处:http://blog.csdn.net/sk719887916/article/details/46582987 从<安卓TV开发(八) 移动智能终端多媒体之在线加载网页视频源& ...
- 采集练习(十二) python 采集之 xbmc 酷狗电台插件
前段时间买了个树莓派才知道有xbmc这么强大的影音软件(后来我逐渐在 电脑.手机和机顶盒上安装xbmc),在树莓派上安装xbmc后树莓派就成为了机顶盒,后面在hdpfans论坛发现了jackyspy ...
- 九度教程第22题——今年暑假不AC(看尽量多的电视节目)
#define _CRT_SECURE_NO_DEPRECATE #include <stdio.h> #include <algorithm> using namespace ...
- 使用PHP的CURL模拟POST采集开了viewstate的asp.net网页数据
用.NET做的网站如果做成POST提交方式,且开了viewstate的话,采集起来有点小繁琐,在此跟大家分享一下做法. 采的难点是必須先取得表單裏面的viewstate和datavalidtion兩個 ...
- JavaWeb学习总结(十)--JDBC之MySQL大数据
一.基本概念 大数据也称之为LOB(Large Objects),LOB又分为:clob和blob,clob用于存储大文本,blob用于存储二进制数据,例如图像.声音.二进制文等. 但是,在mysql ...
随机推荐
- nginx +uwsgi + django配置
一 安装 nginx 二 安装 uwsgi ,pip install uwsgi 三 配置nginx 打开 nginx.conf文件, location / { # root html; # ind ...
- sudo如何保持当前用户的环境变量?
现象,我在/etc/profile里设置全局代理,然后使用命令 1.curl http://www.baidu.com 走代理 2.sudo curl http://www.baidu.com 并没 ...
- 一入python深似海--range()、list与for
range使用方法 使用python的人都知道range()函数非常方便,今天再用到他的时候发现了非常多曾经看到过可是忘记的细节. 这里记录一下: range(1,5)#代表从1到5(不包括5) [1 ...
- 推荐一个好的数据库工具Embarcadero DBArtisan
最近的项目中用到了DB2数据库,由于DB2数据库客户端在操作操作和控制方面不是很方便,如存储过程的编写.后来我们在数据库的操作都转在DBArtisan上了,最新版好像是8.12. 下面介 ...
- 用户空间和内核空间通讯之【Netlink 上】
原文地址:用户空间和内核空间通讯之[Netlink 上] 作者:wjlkoorey258 引言 Alan Cox在内核1.3版本的开发阶段最先引入了Netlink,刚开始时Netlink是以字符驱动接 ...
- 2017.2.28 activiti实战--第六章--任务表单(一)动态表单
学习资料:<Activiti实战> 第六章 任务表单(一)动态表单 内容概览:本章要完成一个OA(协同办公系统)的请假流程的设计,从实用的角度,讲解如何将activiti与业务紧密相连. ...
- Notification(二)——PendingIntent的flag导致数据同样的问题
MainActivity例如以下: package cc.cu; import android.os.Bundle; import android.view.View; import android. ...
- 我是如何通过一个 XSS 探测搜狐内网扫描内网并且蠕动前台到最后被发现的
我是如何通过一个 XSS 探测搜狐内网扫描内网并且蠕动前台到最后被发现的!(附带各种 POC) | WooYun-2014-76685 | WooYun.orghttp://wooyun.org/bu ...
- TP框架模板中ifelse
{if $_username}<ul class="afterLogin"> <li class="username"><a ...
- java:注解(一)
什么是注解 注解(Annotation),也叫(metadata)元数据.一种代码级别的说明.它是JDK1.5及以后版本引入的一个特性,与类.接口.枚举是在同一个层次.它可以声明在包.类.字段.方法. ...