使おうっかなーと思ったけど、画像1枚じゃテーマに組み込みづらかったので*1 、文字データに落とそうと言うことで、HTMLやRSSで出力できるような関数を仕掛けてみた。
使い方はこんな感じ。コードには書いていませんが、あと近くじゃなくていいので、どこかに「あわせて読みたい」のコードを貼る必要があります(「あわせて読みたい」に参加するため)
// ケース1: 単純に配列に格納する
$rec = getRecommendSites("http://note.openvista.jp/", "array");
// ケース2: RSSで出力する
getRecommendSites("http://note.openvista.jp/", "rss");
// ケース3: HTMLの順序付きリストで出力する。
getRecommendSites("http://note.openvista.jp/", "html");で、関数のソースはこんな感じ。
function getRecommendSites($url, $output="array"){
$url = "http://awasete.com/show.phtml?u=".urlencode($url);
$content = file_get_contents($url);
preg_match_all("/(<a href=\"(https?:\/\/[-_.!~*\'()a-zA-Z0-9;\/?:\@&=+\$,%#]+)\">)(.*)(<\/a>)/" , $content, $sites);
$sites = array_splice($sites, 2, 2);
$link = $sites[0][0];
$title = $sites[1][0];
for($i=0;$i<2;$i++){
array_shift($sites[$i]);
array_pop($sites[$i]);
}
if ($output == "array"){
return $sites;
} elseif ($output == "rss"){
$n = count($sites[0]);
$str = '<?xml version="1.0"?>'."\n";
$str .= '<rss version="2.0">'."\n";
$str .= "<channel>\n";
$str .= '<title>'. $title ."</title>\n";
$str .= '<link>' .$link ."</link>\n";
$str .= '<description>「'. $title ."」とあわせて読みたいサイト</description>\n";
$str .= "<language>ja-JP</language>\n";
$str .= '<pubDate>'. date("D, d M Y H:i:s")." +0900</pubDate>\n";
for($i=0;$i<$n;$i++) {
$str .= "<item>\n";
$str .= '<title>'. $sites[1][$i] ."</title>\n";
$str .= '<link>'. $sites[0][$i] ."</link>\n";
$str .= '<description><![CDATA[<a href="'. $sites[0][$i] .'">'. $sites[1][$i] ."</a>]]></description>\n";
$str .= "</item>\n";
}
$str .= "</channel>\n";
$str .= "</rss>\n";
echo $str;
} elseif ($output == "html"){
$n = count($sites[0]);
if ($n){
$str = '<p><a href="'. $url .'">「'. $title ."とあわせて読みたい」</a></p>\n";
$str .= "<ol>\n";
for($i=0;$i<5;$i++) {
$str .= '<li><a href="'. $sites[0][$i] .'">'. $sites[1][$i] ."</a></li>\n";
}
$str .= "</ol>\n";
} else{
$str = "<p>あわせて読みたいサイトが見つかりません</p>";
}
echo $str;
}
}
‥で、作ってみたものの実は使う予定はないんですよね
というのは実際に「あわせて読みたい」を呼び出したら、あんまりあわせて読むようなサイトじゃないだろって感じのサイトが出てきたからで。
そんなわけなんだけど、捨てるのもアレなので、一応公開だけと言うことで。ライセンスはいつものようにCCです。
あと、あわせて読みたい規約との兼ね合いはどうなのだろう。16条1項にはあわせて読みたいもしくは他者の著作権、商標権等の知的財産権を侵害する行為
を禁止するとあって、内容をいわば転載しているわけだから、著作権侵害と取れるかもしれない。ただ傍目には画像の内容を抜き出しているだけで、そうは見えないけどちょっと微妙かもしれない。
まぁ、一番いいのはサイドフィードさんに公式にXMLかJSONかなんかでのプッシュに対応してもらう事なんですが。
- 加えてユーザビリティ上、イメージマップを用いるのではなく、一度画像をクリックしてリンク先から飛ぶ仕組みになっているのも、ユーザに混乱を招くので。[戻る]
- キーワード:




読者のコメント
0件