halka-tech

技術的なことを書きます

函館シゴトガイドのデータをRSSで配信

シゴトガイドの求人情報をパースする - ナントカ嬢
id:a_halka:20090516:1242488352
の続きです.
公式にはRSSの配信をしていないですし,適当になリーダで読み込んで,気になる求人情報にはピンでも立てておけばいんじゃないかあと思いましたので,RSSにしてみました.
とりあえず前回と同じようにページを順番にパースしていきます.

<?php

$num=1;
$job_data;

require_once 'simple_html_dom.php';
require_once 'shitclass.php';
$shitrss=&new rss;

function disp($job){
        global $job_data;
        global $num;
    foreach($job as $jt){
        $j=($num-1);
        //仕事内容[会社名]
        $job_data[$j]['title']=htmlspecialchars(mb_convert_encoding($jt->find('a',0)->innertext,'utf-8','sjis'));
        //応募要項の表示
        $job_data[$j]['description']=htmlspecialchars(mb_convert_encoding($jt->find('p',0)->innertext,'utf-8','sjis'));
        preg_match("/ahicd=[0-9]+/",$jt->find('a',0)->href,$t);
        preg_match("/[0-9]+/",$t[0],$url);
        $job_data[$j]['guid']=$url[0];
        $job_data[$j]['link']='http://hakodate.sgnavi.com/job_detail.php?ahicd='.$url[0];
        $num++;
    }
};
//取得先
$address='http://hakodate.sgnavi.com/job_list.php?sidx=%8C%9F%8D%F5%2CF%2C%2C%2C%2C%2CF1%2C%2C%2C%2C%2C%2C%2C%2C%2C%2C%2C%2C1%2CA%2C';

//求人件数を取得
$html = file_get_html($address);
$count=$html->find('div[id=result-numhd]',0)->find('strong',0)->innertext;
//ページ数の勘定 
$p_count=ceil($count/20);
unset($html);

//各ページのパース
for($i=1;$i<=$p_count;$i++){
    //ページアドレスの生成
    $get_address=$address.'&fin_page='.$i;
    //htmlの取得
    $html = file_get_html($get_address);
    //高い方のエレメントにアクセス
    $job=$html->find('td.cbody');
    disp($job);
    //普通のエレメントにアクセス
    $job=$html->find('div.article');
    disp($job);
    unset($html);
}
//RSSを情報
$rssinfo['title']='【非公式】函館シゴトガイドRSS版';
$rssinfo['link']='http://hakodate.sgnavi.com/';
$rssinfo['author']='a_halka(halka.rjch[at]gmail.com)';
$rssinfo['description']='函館シゴトガイドの求人情報をパースしてRSSしたものです.(非公式)';
$rssinfo['generator']='shitguide';
$rssinfo['filename']='shitguide.rss';

//RSSをはき出すに当たって必要な情報をclassに渡す.
$shitrss->setinfo($rssinfo);

//RSSをはき出す
$shitrss->mkrss_file($job_data);
?>

グローバルな配列にパースしたデータを入れて,それをRSSではき出す関数に渡しています.
RSSをはき出すに当たって,フォーマットに従ってファイルに出力するコードを書きました.

<?php
class rss{
    var $author;
    var $title;
    var $link;
    var $description;
    var $generator;
    var $rss_filename;
    
//RSSの情報をセットする
    function setinfo($t){
    $this->author=$t['author'];
    $this->title=$t['title'];
    $this->link=$t['link'];
    $this->description=$t['description'];
    $this->generator=$t['generator'];
    $this->rss_filename=$t['filename'];
    }
    function mkrss_file($a){
    $fp=fopen($this->rss_filename,'w');
    fwrite($fp, "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n");
    fwrite($fp, "<rss version=\"2.0\">\n");
    fwrite($fp, "    <channel>\n");
    fwrite($fp, "        <title>".$this->title."</title>\n");
    fwrite($fp, "        <link>".$this->link."</link>\n");
    fwrite($fp, "        <description>".$this->description."</description>\n");
    fwrite($fp, "        <generator>".$this->generator."</generator>\n");
    //ここから各々
    foreach($a as $t){
        fwrite($fp, "        <item>\n");
        fwrite($fp, "            <title>".$t['title']."</title>\n");
        fwrite($fp, "            <link>".$t['link']."</link>\n");
        fwrite($fp, "            <guid>".$t['guid']."</guid>\n");
        fwrite($fp, "            <description>".$t['description']."</description>\n");
        fwrite($fp, "            <author>".$this->author."</author>\n");
        fwrite($fp, "            <pubDate>".time()."</pubDate>\n");
        fwrite($fp, "        </item>\n");
    }
    //ここまで各々
    fwrite($fp, "    </channel>\n</rss>");
    fclose($fp);
    }
}
?>

ひたすらファイルに書き込んでいきます.
こんな感じでファイルが出力されます.
シゴトガイドがアップデートされる月曜日のお昼頃に函館市内全域の求人データをパースするようにしました.(cronで)
200件以上の求人情報がRSSリーダに届けられます.
リンク先はシゴトガイドの詳細ページですから,お手数ですがそちらを見て各社とコンタクトを取ってください.
rssのアドレスは以下の通りです.

http://exp.rw12.net/shitguide/shitguide.rss

勝手にRSSにして配信したところで,こんな田舎じゃぼくのアルバイトは決まりませんし,むしろ訴えられます.とってもすばらしいですね!!!!!!!!
まあ,シゴトガイド自体,携帯厨ばっかりでしょうからRSSで配信したところでどうしようもなりません.