カテゴリー別アーカイブ: API

htmlで複数のRSSをまとめて処理するとなると面倒なことになる件(自分メモ)


PHPやperlでは簡単にできることが静的HTMLから操作するとなると簡単ではない。
それでもjQueryを使うことで比較的簡単に動かすことができた。
(静的HTMLとは言ったものの実際は裏でAjaxを動かすので完全な静的ではないですが。。)

▼hoge.html(body内)

<div id="rss_data"></div>
<script type="text/javascript" src="jquery-1.4.2.min.js"></script>
<script type="text/javascript" src="get_rss.js"></script>

▼get_rss.js
※headに書く場合はfunction以外をonloadで記述

var parent_id = "rss_data"; // id="rss_data"にRSSを表示する場合
var search_msg_data;
var gets = new Array();
// RSSフィードを指定する
gets['ameblo'] = "http://rssblog.ameba.jp/xxxxxxx/rss.html";
gets['fc2'] = "http://xxxxxx.blogXX.fc2.com/?xml";
//gets['xxx'] = "http://~"; // 何個でも追加可能(高負荷注意)
for (id in gets){
$("#" + parent_id).html('<p class="loading">Now Loading...</p>');
$.ajax({
type: "GET",
url: "get_rss.php?url=" + encodeURI(gets[id]) + "&id=" + id,
success: function(msg){
search_msg_data = msg;
var get_json = eval("("+search_msg_data+")");
if(get_json.items == null){
$("#" + parent_id + " p.loading").remove();
$("#" + parent_id).append("<p>該当するデータは見つかりませんでした。</p>");
}
else{
var items = get_json["items"];
var search_html = "";
for(var key in items){
if(key == 1){
search_html += '<ol class="' + items&#91;key&#93;.id + '">';
}
search_html += '<li><a href="' + items&#91;key&#93;.link + '">' + items[key].title + '</a>';
search_html += ' (' + items[key].date + ')</li>';
}
$("#" + parent_id + " p.loading").remove();
$("#" + parent_id).append(search_html + "</ol>");
}
}
});
}

▼get_rss.php

<?php
$url = $_GET&#91;'url'&#93;;
$id = $_GET&#91;'id'&#93;;
@$contents = file_get_contents($url);
$contents = preg_replace("/<(/)?(&#91;^:&#93;+):(&#91;^>]+)>/","<$1$2_$3>",$contents);
$xml = simplexml_load_string($contents);
$i=0;
foreach ($xml->item as $item){
$i++;
$array_data[strval($i)] = array(
"id" => $id,
"title" => strval($item->title),
"link" => strval($item->link),
"date" => strval($item->dc_date)
);
}
$array_all = array( "items" => $array_data);
print json_encode($array_all); // JSON出力
?>

PHPで複数のRSSフィードをまとめて処理する(自分メモ)


RSSフィードは項目の共通化が進んでいるので、
連想配列でループするだけで問題なく表示されることが多いみたい。

<?php
$rss = array(
'ameblo' => 'http://rssblog.ameba.jp/ユーザID/rss.html',
'fc2' => 'http://ユーザID.blogXXX.fc2.com/?xml'
);
foreach($rss as $key => $url){
@$contents = file_get_contents($url);
$contents = preg_replace("/<(/)?(&#91;^:&#93;+):(&#91;^>]+)>/","<$1$2_$3>",$contents);
$xml = simplexml_load_string($contents);
print <<< DOC_END
<ol class="{$key}">
DOC_END;
foreach ($xml->item as $item){
$title = strval($item->title);
$link = strval($item->link);
$date = strval($item->dc_date);
$date = preg_replace("/T([0-9:]+)+09:00/"," $1",$date);
print <<< DOC_END
<li><a href="{$link}">{$title}</a> ({$date})</li>
DOC_END;
}
print <<< DOC_END
</ol>
DOC_END;
}
?>

Yahoo!地図クリック検索 for Google Chrome Extensionを作ってみました。


Yahoo!地図の地図画像上に書かれている地名やマークをクリックできるYahoo!地図APIの新機能「注記クリックプラグイン」を使って、クリックするとYahoo!検索での検索結果が表示されるGoogle Chrome Extensionを作ってみました。

ときどき地図画像内の難しい漢字の地名をコピペしたいのに、
できないことがあったので、そういうときにも便利な気がします。

▼Yahoo!地図クリック検索 for Google Chrome Extension
https://chrome.google.com/extensions/detail/jijjoiifjkmkdgnalajckocnefpflokh

Googleマップ(クリック検索はできません)やストリートビューにも切り替えられます。