在i94web博客中,我試過了暢言和多說兩種社會化評論框,后來還是拋棄了暢言,不安全。
無論是暢言還是多說,我都需要從遠程抓取文章的評論數,然后存入本地數據庫。對于多說,請求的格式如下:
- //?獲取評論次數,參數是文章ID?
- function?getCommCount($postid)?
- {?
- ????$jsondata?=?file_get_contents("http://api.duoshuo.com/threads/counts.json?short_name=i94web&threads=$postid");?//?設置true返回數組,不設置或者是false則返回對象?$resjson=?json_decode($jsondata,true);?return?$resjson['response'][$postid]['comments'];?
- }?
對于遠程請求,有很多種方法。今天,LZ就搜羅了六種,供大家參考。
1、用file_get_contents 以get方式獲取內容:
- <?php?
- $url='http://www.ido321.com/';?
- $html?=?file_get_contents($url);?
- echo?$html;?
- ?>
2、用fopen打開url,用get方式獲取
- $fp?=?fopen($url,?'r');?
- stream_get_meta_data($fp);?
- while(!feof($fp))?{?
- $result?.=?fgets($fp,?1024);?
- }?
- echo?"url?body:?$result";?
- fclose($fp);
3、用file_get_contents 以post方式獲取內容:
- $data?=?array?('foo'?=>?'bar');?
- $data?=?http_build_query($data);?
- $opts?=?array?(?
- 'http'?=>?array?(?
- 'method'?=>?'POST',?
- 'header'=>?"Content-type:?application/x-www-form-urlencodedrn"?.?'Content-Length:?'?.?strlen($data)?.?'rn',?'content'?=>?$data?)?);?$context?=?stream_context_create($opts);?$html?=?file_get_contents('http://localhost/e/admin/test.html',?false,?$context);?echo?$html;?
4、用fsockopen函數打開url,以get方式獲取完整的數據,包括header和body,fsockopen需要 PHP.ini 中 allow_url_fopen 選項開啟
- function?get_url?($url,$cookie=false)?
- {?
- $url?=?parse_url($url);?
- $query?=?$url[path].'?'.$url[query];?
- echo?'Query:'.$query;?
- $fp?=?fsockopen(?$url[host],?$url[port]?$url[port]:80?,?$errno,?$errstr,?30);?
- if?(!$fp)?{?
- return?false;?
- }?else?{?
- $request?=?'GET?$query?HTTP/1.1rn';?
- $request?.=?'Host:?$url[host]rn';?
- $request?.=?'Connection:?Closern';?
- if($cookie)?$request.='Cookie:??$cookien';?
- $request.='rn';?
- fwrite($fp,$request);?
- while(!@feof($fp))?{?
- $result?.=?@fgets($fp,?1024);?
- }?
- fclose($fp);?
- return?$result;?
- }?
- }?
- //獲取url的html部分,去掉header?
- function?GetUrlHTML($url,$cookie=false)?
- {?
- $rowdata?=?get_url($url,$cookie);?
- if($rowdata)?
- {?
- $body=?stristr($rowdata,'rnrn');?
- $body=substr($body,4,strlen($body));?
- return?$body;?
- }?
- ?
- return?false;?
- }
- function?HTTP_Post($URL,$data,$cookie,?$referrer='')?
- {?
- //?parsing?the?given?URL?
- $URL_Info=parse_url($URL);?
- ?
- //?Building?referrer?
- if($referrer=='')?//?if?not?given?use?this?script?as?referrer?
- $referrer='111';?
- ?
- //?making?string?from?$data?
- foreach($data?as?$key=>$value)?
- $values[]='$key='.urlencode($value);?
- $data_string=implode('&',$values);?
- ?
- //?Find?out?which?port?is?needed?–?if?not?given?use?standard?(=80)?
- if(!isset($URL_Info['port']))?
- $URL_Info['port']=80;?
- ?
- //?building?POST-request:?
- $request.="POST?".$URL_Info['path']."?HTTP/1.1n";?$request.="Host:?".$URL_Info['host']."n";?$request.="Referer:?$referern";?$request.="Content-type:?application/x-www-form-urlencodedn";?$request.='Content-length:?'.strlen($data_string)."n";?$request.='Connection:?closen';?$request.='Cookie:?$cookien';?$request.='n';?$request.=$data_string.'n';?$fp?=?fsockopen($URL_Info['host'],$URL_Info['port']);?fputs($fp,?$request);?while(!feof($fp))?{?$result?.=?fgets($fp,?1024);?}?fclose($fp);?return?$result;?
- }?
6、使用curl庫,使用curl庫之前,可能需要查看一下php.ini是否已經打開了curl擴展
- $ch?=?curl_init();?
- $timeout?=?5;?
- curl_setopt?($ch,?CURLOPT_URL,?‘http://www.ido321.com/');?
- curl_setopt?($ch,?CURLOPT_RETURNTRANSFER,?1);?
- curl_setopt?($ch,?CURLOPT_CONNECTTIMEOUT,?$timeout);?
- $file_contents?=?curl_exec($ch);?
- curl_close($ch);?
- echo?$file_contents;?
來源:51CTO