2010-12-29 6 views
0

私は簡単な質問があります。私は別のブログから記事を収集するphpでウェブサイトを構築しようとしています。どのようにPHPでこれをコード化するだろうか?何らかのタイプの正規表現が必要でしょうか?私がする必要があるのは、特定のページから記事を取得することだけです。例:http://rss.news.yahoo.com/rss/education 誰も助けることができますか?ありがとうございました。記事を収集するPHPでウェブサイトを構築するには?

+1

記事を収集することはどういう意味ですか?リンクをウェブページに保存しますか?ウェブページのソースコードですか?テキストのみのコンテンツですか?タイトル、著者、記事本文を分ける必要がありますか?これは広すぎる/漠然とした質問です。これを自分で実装し、問題が発生したときに具体的な質問を投稿してください。 –

+1

@Lèse:私が理解しているところから、AustinはXMLを解析したいと考えています。それ以後、彼がそれに従うことは彼自身の責任である。 –

+1

HTML/XMLパーサー(とXPath)以外の正規表現は使用しないでください... –

答えて

0

各サイトごとにパーサーを作成する必要があります。このようなもの...

class Parser_Article_SarajevoX extends Parser_Article implements Parser_Interface_Article { 

    protected static $_url = 'http://www.sarajevo-x.com/'; 

    public static function factory($url) 
    { 
     return new Parser_Article_SarajevoX($url); 
    } 

    protected static function decode($string) 
    { 
     return iconv('ISO-8859-2', Kohana::$charset, $string); 
    } 

    /** 
    * SarajevoX Article Parser constructor 
    * 
    * @param string article's url or uri 
    */ 
    public function __construct($url) 
    { 
     $parsed = parse_url($url); 

     if ($path = arr::get($parsed, 'path')) 
     { 
      // make url's and uri's path the same 
      $path = trim($path, '/'); 

      $exploded = explode('/', $path); 

      if (count($exploded == 4)) 
      { 
       list($this->cat_main, $this->cat, $nita, $this->id) = $exploded; 
      } 
      elseif (count($exploded) == 3) 
      { 
       list($this->cat, $nita, $this->id) = $exploded; 
      } 
      else 
      { 
       throw new Exception("Path not recognized: :url", array(':url' => $url)); 
      } 

      // @todo check if this article is already imported to skip getting HTML 

      $html = HTML_Parser::factory(self::$_url.$path); 

      $content = $html->find('#content-main .content-bg', 0); 

      // @freememory 
      $html = NULL; 

      $this->title = self::decode($content->find('h1', 0)->innertext); 

      // Loop through all inner divs and find the content 
      foreach ($content->find('div') as $div) 
      { 
       switch ($div->class) 
       { 
        case 'nadnaslov': 

         $this->suptitle = strip_tags(self::decode($div->innertext)); 

        break; 
        case 'uvod': 

         $this->subtitle = strip_tags(self::decode($div->innertext)); 

        break; 
        case 'tekst': 

         $pic_wrap = $div->find('div[id="fotka"]', 0); 

         if ($pic_wrap != FALSE) 
         { 
          $this->_pictures[] = array 
          (
           'url' => self::$_url.trim($pic_wrap->find('img', 0)->src, '/'), 
           'desc' => self::decode($pic_wrap->find('div[id="opisslike"]', 0)->innertext), 
          ); 

          // @freememory 
          $pic_wrap = NULL; 
         } 

         $this->content = strip_tags(self::decode($div->innertext)); 

        break; 
        case 'ad-gallery' : 

         foreach ($div->find('div[id="gallery"] .ad-nav .ad-thumbs ul li a') as $a) 
         { 
          $this->_pictures[] = array 
          (
           'url' => self::$_url.trim($a->href, '/'), 
           'desc' => self::decode($a->find('img', 0)->alt), 
          ); 

          // @freememory 
          $a = NULL; 
         } 

        break; 
       } 
      } 

      echo Kohana::debug($this); 

      return; 
     } 

     throw new Exception("Path not recognized: :url", array(':url' => $url)); 
    } 

} 
0

RSSフィードはXMLなので、xml_parse_into_structのようなものを使ってこのフィードの解析を開始します。このページの例は、あなたを動かすのに十分なはずです。

0

各ブログには、関連するrss xmlファイルがあります。ブログページには、ヘッダーにこのXMLファイルを指し示す「リンク」タグがあります。これにより、ユーザーはこれらのRSSフィードを購読することができます。 rss xmlファイルには、タイトル、説明、公開日、URLなどのブログエントリごとに必要なすべてのデータが含まれます。 PHPのsimpleXMLクラスを使用して、XMLコンテンツをsimpleXMLオブジェクトにロードすることができます。その後、必要なRSSフィードの各ピースにアクセスできます。

関連する問題