百度API:頻道新聞API_易源
第二個看這個是因為百度APIStore裡面免費+綜合排序這個就排第二,也是因為公司之前需要新聞采集,自己做的不好。用一下這個看看能有多少有效新聞:

今天看一共有44個頻道,每個頻道第一頁都可以取20條新聞。很強大。代碼很簡單:
1 <html>
2 <head><meta charset="utf-8"></head>
3 <body>
4 <?php
5 $ch = curl_init();
6 $url = 'http://apis.baidu.com/showapi_open_bus/channel_news/channel_news';
7 $header = array(
8 'apikey:百度API密鑰',
9 );
10 curl_setopt($ch, CURLOPT_HTTPHEADER , $header);
11 curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
12 curl_setopt($ch , CURLOPT_URL , $url);
13 $res = curl_exec($ch);
14 $data=json_decode($res,true);
15 echo '<pre>';
16 $channel=array();//頻道
17 if(isset($data['showapi_res_code']) && $data['showapi_res_code']===0 && is_array($data['showapi_res_body']['channelList'])){
18 $channel=$data['showapi_res_body']['channelList'];
19 }else{
20 echo 'error!';
21 exit;
22 }
23 //print_r($data);
24 foreach($channel as $v){
25 $id=$v['channelId'];
26 $name=$v['name'];
27
28 $ch = curl_init();
29 $url = "http://apis.baidu.com/showapi_open_bus/channel_news/search_news?channelId={$id}&page=1&needContent=1&needHtml=1";
30 curl_setopt($ch, CURLOPT_HTTPHEADER , $header);
31 curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
32 curl_setopt($ch , CURLOPT_URL , $url);
33 $res = curl_exec($ch);
34 $data=json_decode($res,true);
35 if(isset($data['showapi_res_body']['pagebean']['contentlist']) && is_array($data['showapi_res_body']['pagebean']['contentlist'])){
36 //$num=count($data['showapi_res_body']['pagebean']['contentlist']);
37 echo '<span>$name.'</span>:';
38 foreach($data['showapi_res_body']['pagebean']['contentlist'] as $dk=>$dv){
39 echo "<a href='{$dv['link']}' style='color:#646'>".$dv['title'].'</a>';
40 foreach($dv['imageurls'] as $iv){
41 echo '<img src="'.$iv['url'].'">;
42 }
43 echo ' ';
44 if($dk>3) break; //一類獲取三條退出,只做初步查看用
45 //print_r($dv);
46 }
47 }
48 echo '<br/>';
49 //break;
50 }
51 echo '</pre>';
52 ?>
53 </body>
54 </html>
自己之前給公司做的新聞采集就比較弱,上一篇提到過,就是用file_get_contents()獲取內容然後preg_match正則去取,正則用的也屬於新手階段。
說一下當時的新聞采集的思路,就是找新聞列表頁,比如:人民網-北京-區縣,然後分析出來所有鏈接,去鏈接裡面去采集新聞標題,內容,圖片。數據庫存儲:`tag`表存儲標簽,字段名稱,鏈接地址,列表開始結束標簽,新聞標題開始結束標簽,內容開始結束標簽。以後采集時候直接選取名稱然後去查詢。目標網站改版後得更新。
遇到的難點有:1.編碼,GB2312轉UTF-8,開始用iconv()後來改用mb_detect_encoding().2.就是正則了,獲取圖片等等。獲取新聞的調試頁面

代碼特別亂,就不獻丑。