如何讓你的站跟新浪的新聞數據保持同步_PHP教程

      編輯Tag賺U幣
      教程Tag:暫無Tag,歡迎添加,賺取U幣!

      推薦:詳解ASP.NET和PHP全面對比
      誰是速度之王? 剛剛在9月編程語言排行榜上取得歷史性突破的PHP在Web開發領域最到的對手可能就是基于微軟.NET技術的ASP.NET。近日,微軟的Joe Stagner在博客上發表了一系列文章比較了PHP和ASP.NET性能方面的文章,引起了來自雙方程序員的大量回應。Joe表示,

      采集已經不是什么新名詞了,很多站長為了省事,也局限于人力的缺乏,使用程序來給自己的網站添磚加瓦,比如本人的個人網站www.xxfsw.com也采集了大量的新聞,那么如果實現呢?今天我們運用php來實現這個功能。

      談到采集,我們不得不說兩個東西,第一個是如何獲取遠程網站的源代碼,這個可以通過php的一個擴展curl來獲取,另一個是如果去匹配你需要的信息,這個的解決辦法是正則表達式。

      Windows下開啟curl的方法如下:

      1、拷貝PHP目錄中的libeay32.dll, ssleay32.dll, php5ts.dll, php_curl.dll文件到 system32 目錄。

      2、修改php.ini:配置好 extension_dir ,去掉 extension = php_curl.dll 前面的分號。

      3、重起apache。

      Linux下開啟curl的方法如下:

      進入安裝 原php 的源碼目錄,

      cd ext
      cd curl
      phpize
      ./configure --with-curl =DIR
      make

      就會在PHPDIR/ext/curl /moudles/下生成curl .so的文件。

      復制curl .so文件到extensions的配置目錄,修改php .ini就好了。

      然后你就可以利用curl來獲取到指定url的網頁源碼了,這里給大家一個封裝好的函數:

      以下為引用的內容:
      function getwebcontent($url){
          $ch = curl_init();
          $timeout = 10;
          curl_setopt($ch, CURLOPT_URL, $url);
          curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
          curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, $timeout);
          curl_setopt ($ch, CURLOPT_FOLLOWLOCATION, 1);
          $contents = trim(curl_exec($ch));
          curl_close($ch);
          return  $contents;
      }

      接下來就應該說到php中的正則表達式了:

      1.中括號

      [0-9]匹配0-9

      [a-z]匹配a-z小寫字母

      [A-Z]匹配A-Z大寫字母

      [a-zA-Z]匹配所有大小寫字母

      可以使用ascii來制定更多

      2.量詞

      以下為引用的內容:
      p+匹配至少一個含p的字符串 
      p*陪陪任何包含0個或多個p的字符串 
      p?匹配任何包含0個或一個p的字符串 
      p{2}匹配包含2個p的序列的字符串 
      p{2,3}匹配任何包含2個或3個的字符串 
      p$匹配任何以p結尾的字符串 
      ^p匹配任何以p開頭的字符串 
      [^a-zA-Z]匹配任何不包含a-zA-Z的字符串 
      p.p匹配任何包含p、接下來是任何字符、再接下來有又是p的字符串 
      ^.{2}$匹配任何值包含2個字符的字符串 
      <b>(.*)b>匹配任何被<b>>包圍的字符串 
      p(hp)*匹配任何一個包含p,后面是多個或0個hp的字符串

      3.預定義字符范圍

      以下為引用的內容:
      [:alpha:]同[a-zA-Z] 
      [:alnum:]同[a-zA-Z0-9] 
      [:cntrl:]匹配控制字符,比如制表符,反斜杠,退格符 
      [:digit:]同[0-9] 
      [:graph:]所有ASCII33~166范圍內可以打印的字符 
      [:lower:]同[a-z] 
      [:punct:]標點符號 
      [:upper:]同[A-Z] 
      [:space:]空白字符,可以是空格、水平制表符、換行、換頁、回車 
      [:xdigit:]十六進制符同[a-fA-F0-9]

      廢話不多說,直接上我的源碼吧,有什么不懂的可以上百度查查。

      以下為引用的內容:
      <?php
      header("Content-type: text/html; charset=utf-8");
      getinfo("http://rss.sina.com.cn/rollnews/news/gn_total.js",1);
      getinfo("http://rss.sina.com.cn/rollnews/news/gj_total.js",2);
      getinfo("http://rss.sina.com.cn/rollnews/news/sh_total.js",3);
      getinfo("http://rss.sina.com.cn/rollnews/sports/sports_total.js",4);
      getinfo("http://rss.sina.com.cn/rollnews/tech/tech1_total.js",5);
      getinfo("http://rss.sina.com.cn/rollnews/finance/finance1_news_total.js",6);
      getinfo("http://rss.sina.com.cn/rollnews/ent/ent_total.js",7);
      getinfo("http://rss.sina.com.cn/rollnews/jczs/jczs_total.js",8);
      function getinfo($infourl,$catid)
      {
          $pagecontent=getwebcontent($infourl);
          preg_match_all("/title:\"(.*?)\"/", $pagecontent, $match);
          $titlearr=$match[1];
          preg_match_all("/link:\"(.*?)\"/", $pagecontent, $match);
          $urlarr=$match[1];
          for ($i=1;$i<count($urlarr);$i++){
              echo "go {$titlearr[$i-1]}\n";
              $title=iconv("gbk","utf-8",$titlearr[$i-1]);
              $content=iconv("gbk","utf-8",getnewscontent($urlarr[$i]));
              $content=mysql_escape_string($content);
              if(!insertdb($title,$content,$catid)) break;
          }
      }
      function insertdb($title,$content,$catid){   
          將數據寫入你的庫
      }
      function getnewscontent($newsurl){
          $newscontent=getwebcontent($newsurl);
          preg_match_all("/<div class=\"blkContainerSblkCon\" id=\"artibody\">([\s\S]*?)<!-- publish_helper_end -->/",$newscontent,$match);
          $content=preg_replace("/<a.*?<\/a>/si","",$match[1][0]);
          $content=preg_replace("/<div style=\"overflow:hidden;zoom:1;\" class=\"otherContent_01\">.*?<\/div>/si","",$content);
          $content=preg_replace("/<div class=\"blk-video\">.*?<div class=\"clearcl\"><\/div>/si","",$content);
          $content=str_replace("<div style=\"clear:both;height:0;visibility:hiddden;overflow:hidden;\"></div>","",$content);
          return $content;
      }
      function getwebcontent($url){
          $ch = curl_init();
          $timeout = 10;
          curl_setopt($ch, CURLOPT_URL, $url);
          curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
          curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, $timeout);
          curl_setopt ($ch, CURLOPT_FOLLOWLOCATION, 1);
          $contents = trim(curl_exec($ch));
          curl_close($ch);
          return  $contents;
      }
      ?>

      然后如何實現比較實時的同步呢,這可以利用windows下的任務計劃或linux下的crontab 了,定時(比如十分鐘)執行這個程序,這樣,你就不再愁網站沒有內容了。

      分享:共享西西弗斯自動求職系統
      做這個系統的背景是前段時間幫女朋友找工作,大家也許都有過這樣的感受,發出一份份簡歷都石沉大海,為什么呢?經過測試,我發現是因為郵件的閱讀率并不高,也就是說你發出的大多數簡歷別人看都沒有看過,更不用說約你面試了。 怎么辦呢?只能靠一種戰術----

      來源:模板無憂//所屬分類:PHP教程/更新時間:2009-12-08
      相關PHP教程