[arikui] RSSフィード

2007-09-12

書いてみて思ったこととか 02:59

キャッシュするプログラムなんか書いたことないんで、うまい方法が思いつかないですけど、URL単位でタイトルとコメントをキャッシュしていくならDB使った方が早い気がしてきた。何にせよ、ブックマーク時刻の取得がフィードから出来ないってのが痛すぎる、つーか変すぎる。付加対策とかでやってるんだろうか……。

何か今の方法が一番シンプルでいい気もするけど。

↓色々書いてて飽きた残骸。動かしたことない。

<?php
define("CLIP_HATEB_URL",           "http://b.hatena.ne.jp/t");
define("CLIP_HATEB_KEIBA_CURRENT", CLIP_HATEB_URL . "/%E7%AB%B6%E9%A6%AC?&sort=eid");
define("CLIP_HATEB_KEIBA_HOT",     CLIP_HATEB_URL . "/%E7%AB%B6%E9%A6%AC?&sort=hot&threshold=3");
define("CLIP_HATEB_HORSE_CURRENT", CLIP_HATEB_URL . "/horse?&sort=eid");
define("CLIP_HATEB_HORSE_HOT",     CLIP_HATEB_URL . "/horse?&sort=hot&threshold=3");
define("CLIP_HATEB_COMMENT",       "http://r.hatena.ne.jp/entry/bcomment?entryurl=");

class Clip_Hateb
{
	var $cacheDir         = "./cache";
	var $cacheCommentDir  = "comment";
	var $cacheBookmarkDir = "bookmark";
	var $categories       = null;

	/**
	 * Get comment data by cache
	 *
	 * @param  string $url
	 * @return array
	 */
	function getComment($url)
	{
		return fgetcsv(
			fopen(
				implode("/", array($this->cacheDir, $this->cacheCommentDir, md5($url))
			)
		);
	}

	/**
	 * Create comment cache file
	 *
	 * @param  string $url
	 * @return void
	 */
	function createCommentCache($url)
	{
		$file = fopen($this->cacheCommentDir . "/" . md5($url), "w");
		$data = file_get_contents(CLIP_HATEB_COMMENT . $url);
		fwrite($file, $data);
		fclose($file);
	}

	/**
	 * Get bookmark data by cache.
	 *
	 * @param  int $n
	 * @param  int $start=0
	 * @return array
	 */
	function getBookmarksByCache($n, $start=0){
		$dir         = $this->cacheDir . $this->cacheBookmarkDir;
		$filelist    = scandir($dir);
		$files       = array();
		$data_oldest = 0;

		for($i = 0; $i < count($filelist); $i++){
			if($filelist[$i] == "." || $filelist[$i] == "..")
				continue;

			$file = array();
			$file["time"] = filemtime($dir . "/" . $filelist[$i]);
			$file["name"] = $filelist[$i];
			$files[]      = $file;
		}

		function sort_callback($a, $b){
			return ($a["time"] < $b["time"]) -1 : 1;
		}

		usort($files, "sort_callback");

		$caches = array();

		for($i = $start; $i < $n+$start; $i++){
			$data            = fgetcsv( fopen($dir . "/" . $filelist[$i]) );
			$_cache          = array();
			$_cache["title"] = $data[0];
			$_cache["url"]   = $data[1];
			$caches[]        = $_cache;
		}
	}

	/**
	 * Get bookmark data by Hateb.
	 *
	 * @param  string $url
	 * @return array
	 */
	function getBookmarksByHatena($url)
	{
		$html = file($url);
		$data = array();
		$text = "";

		for($i = 0; $i < count($html); $i++){

			if( !preg_match("/<a\s[^>]*class=\"bookmark\"[^<]*>/", $html[$i]) )
				continue;

			$line = substr($html[$i], 0, strpos($html[$i], "</a>"));
			preg_match("/href=\"(https?:\/\/[^\"]*)\"/", $line, $match);

			$_data          = array();
			$_data["title"] = strip_tags($line);
			$_data["url"]   = $match[1];
			$data[]         = $_data;
		}

		return $data;
	}

	/**
	 * Create cache file of bookmark
	 *
	 * @param  array $data
	 * @return void
	 */
	function createBookmarkCache($data){
		$dir = $this->cacheDir . "/" . $this->cacheBookmarkDir;

		for($i = 0; $i < count($data); $i++){
			$file = $dir . "/" . md5($data[$i]["url"]);

			if( file_exists($file) )
				touch($file);
			else{
				$fp = fopen($file, "w");
				fwrite($fp,
					"\"" . $data[$i]["title"] . "\",\"" . $data[$i]["url"] . "\""
				);
				fclose($fp);
			}
		}
	}

	/**
	 * get latest clip date of url.
	 *
	 * @param  array $data
	 * @return void
	 */
	function getLatestDate($url)
	{
	}

	function getCount($urls)
	{
	}
}
?>
トラックバック - http://tbcenter.g.hatena.ne.jp/arikui/20070912

2007-09-11

読み落とし 03:58

ブックマークした日付が検索のフィードにねえじゃん。はてブ使えねえー。OpenSearch なら、って止まってるじゃん。使えねえー。

page指定も出来ないので、やむを得ずHTML読み込むにしても。日付取得だけに25回もリクエスト送るのはなあ。キャッシュ用に一番最新のURLだけ取得かな。

ちゃんと見てみると、はてブ泣けるわ。

トラックバック - http://tbcenter.g.hatena.ne.jp/arikui/20070911

2007-09-10

はてブ競馬クリップ読みました 01:59

相当リクエスト必要なんですね。コメント取得用のまともなAPIがないってところが辛いところですが。

  • フィードをキャッシュ
  • コメントをキャッシュ
    • 新着(フィードから)があれば更新
  • 件数取得はAPIから

って感じでやればリクエストは結構減らせるでしょう。面倒臭いですね。

momdomomdo2007/09/10 23:07ソースがアレでナニで申し訳ないですorz
やはりリクエストが多いのがネックですか。時間があれば考えて見ます。

arikuiarikui2007/09/10 23:17単純計算で1ページに51回はリクエストしてることになりますからね。
キャッシュの方法考えたけど、そう難しくなさそうなんで、私も時間取れたら手伝いますよ。

トラックバック - http://tbcenter.g.hatena.ne.jp/arikui/20070910