Cara Paling Malas dan Gampang Lakukan Web Scraping untuk AGC atau Autoblog

Memanfaatkan Full-Text RSS Feeds sebagai API Web Service

Saya mencoba memanfaatkan Full-Text RSS Feeds ini sebagai API web service untuk lakukan gathering data dari web-web yang dijadikan target.

Berikut penampakan proses gathering data yang saya lakukan:

Jika Anda perhatikan video di atas, selain berupa RSS, ternyata kita juga bisa lakukan gathering data dari url single post sebuah website. Tentu saja jika dengan RSS kita bisa lakukan gathering beberapa artikel secara bersamaan sedangkan jika kita ambil url single post maka hanya satu artikel yang akan terbaca.

Berikut kode yang saya gunakan untuk membaca data JSON tersebut:

const DEFAULT_CATEGORY = 'Uncategorized';

$item = array();

if(is_array($web->rss->channel->item)){
  foreach ($web->rss->channel->item as $i=>$ch){
    $title = $ch->title;
    $excerpt = $ch->description;
    $content = $ch->content_encoded;
    $source = $ch->dc_identifier;
    
    $category = array();
    if (!empty($ch->category)){
      if (is_array($ch->category)){
        foreach($ch->category as $cat){
          if (strpos($cat, ',')){
            $key = explode (',', $cat);
            $reindex = array_reverse($key);
            $cat = implode(' ', $reindex);
          }
          $category[] = ucwords(str_replace('-', ' ', slug(trim($cat))));
        }
      } else {
        $key = explode (',', $ch->category);
        $reindex = array_reverse($key);
        $cat = implode(' ', $reindex);
        $category[] = ucwords(str_replace('-', ' ', slug(trim($cat))));
      }
    }  else {
      $category[] = ucwords(str_replace('-', ' ', slug(trim(DEFAULT_CATEGORY))));
    }
    
    preg_match_all( '|<img.*?src=[\'"](.*?)[\'"].*?>|i', $content, $images); 
    $images = $images[1];
    
    $par = array();
    if(!empty($content)){
      $paragraph = explode("

", $content);
      $paragraph=array_map('trim',$paragraph);
      foreach($paragraph as $p=>$para){
        $par[] = '

'.strip_tags($para).'

';
      }
      $content = implode('', $par);
    }
    
    $item[] = array(
      'id'=>post_id($title),
      'title'=>$title, 
      'excerpt'=>$excerpt, 
      'content'=>$content, 
      'remote_img'=>array_splice($images, 0, 1),
      'date'=>date("Y/m/d"),
      'category'=>$category, 
      'source'=>$source, 
      'user'=>spintax($user));
  }
} else {
    $title = $web->rss->channel->item->title; 
    $excerpt = $web->rss->channel->item->description;
    $content = trim(trim($web->rss->channel->item->content_encoded, PHP_EOL)); 
    $source = $web->rss->channel->item->dc_identifier;
    
    $category = array();
    if(!empty($ch->category)){
      if (is_array($ch->category)){
        foreach($ch->category as $cat){
          if (strpos($cat, ',')){
            $key = explode (',', $cat);
            $reindex = array_reverse($key);
            $cat = implode(' ', $reindex);
          }
          $category[] = ucwords(str_replace('-', ' ', slug(trim($cat))));
        }
      } else {
        $key = explode (',', $ch->category);
        $reindex = array_reverse($key);
        $cat = implode(' ', $reindex);
        $category[] = ucwords(str_replace('-', ' ', slug(trim($cat))));
      }
    } else {
      $category[] = ucwords(str_replace('-', ' ', slug(trim(DEFAULT_CATEGORY))));
    }
    
    preg_match_all( '|<img.*?src=[\'"](.*?)[\'"].*?>|i', $content, $images); 
    $images = $images[1];
    
    $par = array();
    if(!empty($content)){
      $paragraph = explode("

", $content);
      $paragraph=array_map('trim',$paragraph);
      foreach($paragraph as $p=>$para){
        $par[] = '

'.strip_tags($para).'

';
      }
      $content = implode('', $par);
    }
    $item[] = array(
      'id'=>post_id($title),
      'title'=>$title, 
      'excerpt'=>$excerpt, 
      'content'=>$content, 
      'remote_img'=>array_splice($images, 0, 1),
      'date'=>date("Y/m/d"),
      'category'=>$category, 
      'source'=>$source, 
      'user'=>spintax($user));
}

 

Untuk menghindari proses gathering data yang berulang dari sumber yang sama, saya mencoba menyimpan data yang dihasilkan dalam database, untuk kemudahan saya pilih Database SQLite dan contoh script auto blog penggunaan database SQLite dengan PHP bisa baca di sini.

 

2 thoughts on “Cara Paling Malas dan Gampang Lakukan Web Scraping untuk AGC atau Autoblog”

Leave a Reply