ランキングブログパーツ


過去に作った、〇〇〇〇(HamaZo)内で自分のブログの現在ランキングを表示するブログパーツの仕組みを公開。このブログの右上に表示されているブログパーツになります。現在「番外」と表示されているやつです。
このブログパーツは、僕が2番目に書いたスクリプトですね。
ちなみに、一番最初にプログラム覚えて書いた最初の1番目は、オレンジ色のRSSリーダーです。
このブログパーツは、〇〇〇〇のブログランキングを取得して、単純に表示させているだけです!
でも「ブログランキングを取得する」というところがミソになりますね。
普通にやると、データベースから取得するというやり方でお手軽簡単に書くらしいのですが、僕は社内でプログラム組んでるわけではないので、そんなことしません。
あくまで社外の1人、誰でもできるやり方で作りました。
本当に「車輪の再発明」とか馬鹿の象徴ですね。


まず、〇〇〇〇のランキングは以下のページにあります。
■〇〇〇〇ランキングページ
http://hamazo.tv/ranking
このページの HTML を解析して、データとして再利用しやすいように xml に変換します。
最近、データはなんでもかんでも xml にしてしまうと便利ということに気づきました。
この xml ファイルに変換して出力するのは PHP で作っています。
PHP は全く分からなかったので、これが作りたいがために勉強しました
正規表現によって以下のような xml の形式に変換。

<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"><channel>
<title>HamaZo ランキングXML変換</title>
<link>http://hamazo.tv</link>
<description>ランキングページのHTMLをXMLに変換したもの</description>
<language>ja</language>
<pubDate></pubDate>
<lastBuildDate>$today</lastBuildDate>
<docs>http://blogs.law.harvard.edu/tech/rss</docs>
<generator>$domein</generator>\n

サーバーに負荷をかけると怒られるので、毎日午前1時に html を取得実行するようにします。
借りている レンタルサーバーで cron に設定しています。
そうして書き出された静的な xml ファイルを、ブログパーツが表示されるたびに、設定ファイルとして読み込むように しています。
実際のブログパーツですが、Flash で制作。
作ったのは 2008 年 5 月のようですが、当時 ActionScript 2.0 で作っていたので、xml パースをする機能がありせん。なので、XMLPATH というライブラリを読み込んでいます。
そして配列に入れ込んだ ランキングデータから、自分のブログの URL から検索して 何位かを取得します。

function getXML(){
//test1:ノードを辿って、指定の要素にアクセスする。
//「var 解析データ格納用Arrayインスタンス名:Array=XPath.selectNodes(解析対象のXMLオブジェクト,"解析対象の指定")」
//testNodes:配列の格納の仕方調査、先頭ノード(1)を表示
//	var testNodes:Array=XPath.selectNodes(indexXMLRoot,"rss/channel/item[1]"); //test表示
//	trace(testNodes); //test表示----------------------------------
//配列に入れる
var itemRanking:Array=XPath.selectNodes(entryRDF,"rss/channel/item/rank"); //rank
var itemURL:Array=XPath.selectNodes(entryRDF,"rss/channel/item/url");
var itemTitle:Array=XPath.selectNodes(entryRDF,"rss/channel/item/title/text()");
//順位取得
var itemMe:Array=XPath.selectNodes(entryRDF,"rss/channel/item[url='" + blogID + "']/rank/text()");
var itemMe = string(itemMe).split( "位" );
var itemMe = itemMe[0];
if ( itemMe == "" ) { // ランキング入ってなかったら
starBurst.attachMovie("rankingout", "rankingout_mc", 110);
starBurst.rankingout_mc._x = 12;
starBurst.rankingout_mc._y = 96;
trace("nothing.");
} else if ( itemMe < 100 ) { // 2桁だったら
itemMe0 = itemMe.charAt(0);
itemMe1 = itemMe.charAt(1);
} else { //						3桁だったら
starBurst.rankText.todayRank100.text = itemMe;
starBurst.rankText.todayRank_bk100.text = itemMe;
starBurst.rankText.todayRank_wh100.text = itemMe;
}

と、いうことをしています。
それにしても、もう4年前に作ったものになるんですね。

コメント

タイトルとURLをコピーしました