XML形式のログからMD用のソースに変換する
2010-03-01 21:49 /
Twilog の「設定」ページでダウンロードできるログファイルには、CSV 形式と XML 形式の二種類があります。当サイトの Twitter archive に追加するとき、XML 形式から当サイトのソース用にコンバートしているのですが、
<?xml version=”1.0″ encoding=”UTF-8″?>
<tweets>
<tweet>
<id>9821289050</id>
<time>100301 204315</time>
<text>化粧直し。</text>
</tweet>
<tweet>
<id>9821076248</id>
<time>100301 203504</time>
<text>うーん。いかんな。これではじりじりと、サーバ群の運用担当者という扱いにされてしまう。</text>
</tweet>
[... 以下、同様 ...]
</tweets>
これが元の XML 形式です。コンバート用のコードは、
<?php
$tweets = array();
$count = 0;
$fp = fopen( ‘philsci100301.xml’, “r” );
while( ! feof( $fp ) )
{
$ent = fgets( $fp, 1024 );
if ( preg_match( “/^<time.*/”, $ent ) )
{
$time = str_replace( “<time>”, “”, $ent );
$time = trim( str_replace( “</time>”, “”, $time ) );
$date = explode( ” “, $time );
$year = ’20′ . substr( $date[0], 0, 2 );
$month = substr( $date[0], 2, 2 );
$day = substr( $date[0], -2, 2 );
$hour = substr( $date[1], 0, 2 );
$minute = substr( $date[1], 2, 2 );
$second = substr( $date[1], -2, 2 );
$t = $count + 1;
$tweets[ $t ] = “\t\t<dd>” . $year . “年” . $month . “月” . $day . “日 ” . $hour . “時” . $minute . “分” . $second . “秒</dd>\n”;
continue;
}
if ( preg_match( “/^<tex.*/”, $ent ) )
{
$text = str_replace( “<text>”, “”, $ent );
$text = trim( str_replace( “</text>”, “”, $text ) );
$text = preg_replace( “/(.*)(http\:.+)/”, ‘\1 <a href=”\2″ target=”_blank”>\2</a>’, $text );
$tweets[ $count ] = “\t<dt>” . $text . “</dt>\n”;
$count = $count + 2;
continue;
}}
reset( $tweets );
ksort( $tweets );
foreach( $tweets as $line )
{
if ( preg_match( “/<dd>/”, $line ) )
{
echo $line;
echo ‘</dl>’.”\n”;
}
if ( preg_match( “/<dt>/”, $line ) )
{
echo ‘<dl>’.”\n”; echo $line;
}
}
このようになっています。適当なファイル名にして、XMLファイルを同じ階層に置くと、
<dl>
<dt>またキーワードで自動フォローされてしまった・・・</dt>
<dd>2010年02月27日 19時55分05秒</dd>
</dl>
個々のつぶやきがこのように変換されて出力されます。
