phpcms二次开发通过豆瓣ID获取豆瓣电影信息接口

这几天没事自己开发了一个抓取豆瓣信息的接口,是在phpcms上做的二次开发了,基本没动源程序。

好了,一般都不太喜欢废话,直接上代码吧:

api目录下创建一个抓取豆瓣信息的接口文件get_dbinfo.php,内容如下:

<?php
defined('IN_PHPCMS') or exit('No permission resources.'); 
/*********************
custom field
#dbid 豆瓣ID
#years 发布年份
#dbinfo 豆瓣资料
#dbscore 豆瓣评分
#description 电影简介
**********************/
function GrabImage($url, $img_path) {
	if ($url == ""){
		return false;
	}
	$filename = date("Ymdhis").".jpg ";			
 	ob_start();//打开输出
 	readfile($url);//输出图片文件
 	$img = ob_get_contents();//得到浏览器输出
 	ob_end_clean();//清除输出并关闭
 	$size = strlen($img);//得到图片大小
 	$fp2 = @fopen($img_path.$filename, "a");
 	fwrite($fp2, $img);//向当前目录写入图片文件,并重新命名
 	fclose($fp2);
 	return $filename;//返回新的文件名
}

$dbid = intval($_GET['id']);
$db_url = "https://movie.douban.com/subject/";
$item = file_get_contents($db_url.$dbid);
//电影海报
$pic_start = strpos($item, "<div id=\"mainpic\" class=\"\">");
$pic_end = strpos($item, "<div id=\"info\">") - 16;
$pic_length = $pic_end - $pic_start;
$pic = substr($item, $pic_start, $pic_length);
$pic_tag = '/<img.*?\"([^\"]*(jpg|bmp|jpeg|gif|webp)).*?>/i';
preg_match($pic_tag, $pic, $img_url);
$img_path = "uploadfile/".date("Y/md/");
if(!file_exists($img_path)){
	mkdir($img_path, 0777, ture);
}
$picname = GrabImage($img_url[1], $img_path);
$data[0]['pic'] = APP_PATH.$img_path.$picname;
//电影名字
preg_match("/<span property=\"v:itemreviewed\">(.*)<\/span\>/i", $item, $title);
$data[0]['name'] = $title[1];
//上映年份
preg_match("/<span class=\"year\">(.*)<\/span>/i", $item, $years);
$posttime = ereg_replace("\(|\)","",$years[1]);
$data[0]['years'] = $posttime;
//电影信息
$content_start = strpos($item, "<div id=\"info\">") + 16;
$content_end = strpos($item, "<div id=\"interest_sectl\">");
$content_length = $content_end - $content_start;
$content_str = substr($item, $content_start, $content_length);
$content = str_replace("</div>", "",$content_str);
$content = ereg_replace("<a [^>]*>|<\/a>","",$content);
$content1 = ereg_replace("<span class=\"pl\">IMDb链接:<\/span> (.*)<br>", "", $content);
$content2 = ereg_replace(" property=\"v:genre\"| property=\"v:runtime\"| property=\"v:initialReleaseDate\"", "", $content1);
$data[0]['content'] = trim($content2);
//电影评分
preg_match("/<strong class=\"ll rating_num\" property=\"v:average\">(.*)<\/strong>/i", $item ,$score);
$data[0]['score'] = $score[1];
//电影类型
preg_match("/<span property=\"v:genre\">(.*)<\/span>/i", $content, $type);
$type = str_replace("/ ", "", $type[0]);
$data[0]['type'] = strip_tags($type);
//IMDB ID
preg_match("/<span class=\"pl\">IMDb链接:<\/span> (.*)<br>/i", $content, $imdbid);
$data[0]['imdbid'] = $imdbid[1];
//电影简介
$description_start = strpos($item, "<div class=\"indent\" id=\"link-report\">");
if($description_start){
	$description_str = substr($item, $description_start);
	$description_end = strpos($description_str, "</div>");
	$description = substr($description_str, 0, $description_end)."</div>";
	//$description = ereg_replace("<a [^>]*>(.*)<\/a>","",$description);
	$data[0]['description'] = $description;

}else{
	$data[0]['description'] = "暂无电影介绍";
}
echo json_encode($data);	
?>

使用这个当然你还得创建一下自定义字段,当然要对应我接口上的dom标签的名字来,豆瓣id 字段名dbid(int),发布年份 字段名years (int(4)) 豆瓣资料 字段名dbinfo (mediumtext) 豆瓣评分 dbscore (decimal(1,1)) ,电影类型直接使用关键词表单,IMDB ID 字段名imdbid(int) ,电影简介这个使用原文件内容的编辑器

接口写好了,返回来的是JSON数据,我们来改添加文件的地方,是content_add.tpl.php(如果是编辑那就是content_edit.tpl.php)这个文件,添加一个ajax并在豆瓣ID后面添加一个获取按钮,主要都是操作DOM树,直接上代码

$("#dbid").after("<input type='button' name='dbid' id='btn' value='获取豆瓣信息' />");
$("#dbid").attr("placeholder","请输入豆瓣ID来获取信息!");
$("#btn").click(function(){
	if($("#dbid").val()==""){
		alert("请先输入豆瓣ID,再点击获取豆瓣信息!");
		$("#dbid").focus();
		return false;
	}else{
	var dbid = $("#dbid").val();
	$.get("/api.php?op=get_dbinfo", {id:dbid},
		function(data){
			//alert(data);
			var info = eval(data);
			$("#thumb_preview").attr("src",info[0]['pic']);
			$("#thumb").val(info[0]['pic']);
			$("#title").val(info[0]['name']);
			$("#years").val(info[0]['years']);
			$("#dbinfo").val(info[0]['content']);
			$("#dbscore").val(info[0]['score']);
			$("#keywords").val(info[0]['type']);
			$("#imdbid").val(info[0]['imdbid']);
			//$("#content").val(info[0]['description']);
			var ckEditor = CKEDITOR.instances.content;
			ckEditor.setData(info[0]['description']);
		});			
	}
});		

目前只抓取了这些资料,点击豆瓣ID获取的电影信息如下图

QQ截图20170608170415.jpg

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://sulao.cn/post/386.html

我要评论

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。