CMP调用百度WAP搜索图片插件

CMP和WORDPRESS总是那么的有意思,一点也不懂PHP和FLASH的我也试着写插件了。昨天到今天在网上东拼西凑,折腾出来了这个插件,能自动获取百度WAP图片搜索,以CMP中歌曲名和演唱者为关键词,的第一张图片作为CMP的视频背景。这样免去手动在LIST.XML里一首一首歌地添加背景图片,并且攻取的图片一般只有10多K,能很快传送回CMP。

这次主要见识了下php正则表达preg_match_all ,split函数,熟悉了下urlencode,str_replace, file_get_contents, str_replace函数。

CMP官方论坛:http://bbs.cenfun.com 作者为 @Cenfun
插件代码如下:(直接下载BaiduPic4CMP

<?php
/*Plugin Name:BaiduPic4CMP
Plugin URI: http://littlebar.tk/2011/04/04/get-baidu-pic-for-cmp/
Description: 自动获取百度WAP图片搜索,以CMP中歌曲名和演唱者为关键词,的第一张图片作为CMP的视频背景。
Version: 1.0
Author: IchIlly
Author URI: http://little8.com @IchILLy on Sinat, @LittleHi & @JumpHi on QQt, @JungleHi on Twitter
License:no

使用方法:把这个文件上传到PHP空间,然后在CMP的CONFIG.XML对bg_video进行配置,下面是我本地测试时候的配置
bg_video = "{src:http://localhost/app/cmp/plugins/get-baidu-pic.php?title={label}&rd={rd}, repeat:0, xywh:&#91;0C,0C,0,0&#93;}" 

第一次给CMP写代理程序,PHP一点都不懂,全是靠网上东拼西凑得出来的代码,所以注释很详细,希望对和我一样的菜鸟有帮助
*/

//获取CMP传递来的信息
//歌曲名
$title = urldecode($_REQUEST&#91;title&#93;);

//演唱者
$artist = urldecode($_REQUEST&#91;artist&#93;);

//把歌曲名和演唱者做为百度图片搜索关键词
$query = "{$title} {$artist}" ;

//如果演唱者为空,以-为界拆分歌曲名
if (empty($artist)) {
	$arr = split("-", $title);
	$size = sizeof($arr);
//如果新分出来的部分字数大于1,者把前半部分作为演唱者 后半部分作为歌曲名。PS,这个前后颠倒应该没事吧,只要关键词一样搜索结果是一样的。直接从@cenfun的自动获取歌词代码中抄来的。
	if ($size > 1) {
		$artist = trim($arr[0]);
		$title = trim($arr[1]);
	}
}

//如果运气不好,没有任何信息从CMP传递过来,用MUSIC为关键词 获取一张图片
if ( $query='+' ) {
	$query='music';
} else {

//好像又要编码 不然有空格会出错。PS;@Cenfun,最上面不对$title和$artist urldecode 这个地方不编码。可以吗?为什么我本地测试有问题?
$query=urlencode($query);

}

//在指定的网站获取图片

/*如果QUERY后没有参数请去掉这里的注释 即使用百度中等大小图片
$url='http://wap.baidu.com/pu=sz%40224_220/img?tn=bdwid&word='.$query;
*/

//QUERY后面还有参数就用双引号,这里是找百度的大图320P
$url="http://wap.baidu.com/pu=sz%40224_220/img?tn=bdwid&word=$query&mid=w320";

//file_get_contents() 函数把整个文件读入一个字符串中 
$string=file_get_contents($url); 

//php正则表达获得所有图片地址
$reg = "/<img&#91;^>]*src=\"(http:\/\/(.+)\/(.+)\.(jpg|gif|bmp|bnp))\"/isU"; 

//把抠出来的 img 地址存放到 $img_array 变量中 
preg_match_all($reg, $string, $img_array, PREG_PATTERN_ORDER); 

//过滤重复的图片 
$img_array = array_unique($img_array[1]); 

//虽然函数是获取所有的图片,但百度这个页面只有一张图片的
foreach ($img_array as $img){ 

//替换图片地址中的&amp;为& 不然URL中含有amp;会导致获取图片失败
$filtered_pic=str_replace('&amp;','&',$img);

//获得图片
$img = file_get_contents($filtered_pic); 
//图片命名

//保存图片到 @cenfun, 可不可以不保存直接发送到浏览器?
file_put_contents('video-bg.jpg',$img); 

} 
//把图片发送到浏览器
Header ('Content-type: image/png');
readfile('video-bg.jpg');

?>
2 Comments

Add a Comment

Your email address will not be published.