Archive for 4月, 2010

正規表現のお勉強

日曜日, 4月 11th, 2010

twitterからRSSをひっぱってきてモフモフする時って、

ブログからひっぱってくる時と事情が違う。

一緒なんだけども、「@….」「#….」とかね、タイムラインではリンクになってますよね。

今回はPHPでTwitterからRSSでひっぱってきて、@も#も全部リンクにすることが出来るかなぁ、という勉強。

正規表現は難しい。というかややこしい。僕にとって。

わかりやすいサイトを教えてもらったので、参考にそこを読む。

さるにもわかる正規表現

まずはXML_RSSでRSSを取得しパース

$tweet=&new XML_RSS($tweet_url);
$tweet->parse();

getItems()で中身を取り出す

foreach($tweet->getItems() as $item){  
    $item['description']=mb_convert_encoding($item['description'],'UTF-8','auto');
    $item['description']=mb_substr($item['description'],6);
    $pat=array("/(https?)(:\/\/[[:alnum:]\+\$\;\?\.%,!#~*\/:@&=_-]+)/i");
    $_user=array("/(@)([[:alnum:]_]+)/");
    $_search=array("/(#)([[:alnum:]_]+)/");
    $replacements = array("<a href=\"\\1\\2\"?phpMyAdmin=f59fa711f0e26091bc5c43fe01778ab9>\\1\\2</a>");
    $replacements2 = array("\\1<a href=\"http://twitter.com/\\2\">\\2</a>");
    $replacements3 = array("<a href=\"http://twitter.com/search?q=%23\\2\">\\1\\2</a>");
    $item['description']= preg_replace($pat, $replacements, $item['description']);
    $item['description']= preg_replace($_user, $replacements2, $item['description']);
    $item['description']= preg_replace($_search, $replacements3, $item['description']);
    $item['list']="<li class=\"grid twitter_li\">";
}

色々調べながらやってみました。時間かかったけど。

$pat、$_user、$_searchがマッチさせたい文字列です。

$pat=array("/(https?)(:\/\/[[:alnum:]\+\$\;\?\.%,!#~*\/:@&=_-]+)/i");

各項目内の[:alnum:]はアルファベット・数字全部、()は文字列のグループ化。

「?」は「直前の文字が1つ、もしくは0つ」ということみたいです。

(https?)、はつまり「httpかhttps」がマッチ、ということになります。

[]は「[]ないどれか1つ」で、+は「最低1つ直前の文字があることで同じ文字の繰り返し」ですか。

ふー

「同じ文字の繰り返し」なのですが、[]内の文字の繰り返し、っていうことになるのですね。

$replacementsは置き換える文字列です。

$replacements = array("<a href=\"\\1\\2\"?phpMyAdmin=f59fa711f0e26091bc5c43fe01778ab9>\\1\\2</a>");

「\”」は”のエスケープで、「\\1\\2」はグループ化された$patの文字列部分をあらわしています。

なので

http://www.takasumi-nagai.com/

があるとしたら、

(http) \\1
(://www.takasumi-nagai.com/) \\2

ということになる(ぼんやりしかわかってないけど・・・)

なんしか、これで出来ました。

難しいですね。正規表現。

私のサイトトップで実装してます。

ちゃんと動いているみたいですね。

良かった。

WordPress3.0 beta 1

金曜日, 4月 9th, 2010

WordPress3.0 beta 1の日本語版が出たので入れてみた。

とはいっても、ローカルに。

怖いので。

今のところ問題なく・・・と言いたいところだけど、

プラグインのCodeColorerが彼のCSSを読まない。

たんなる文字列として表示(指定の行数とかはちゃんとうごいているけど)されている。

まったくもって、シンプル。シンプルすぎて「コードかテキストなのかわからん」状態。

なしてだろう?とフォーラムに書いてやろうとしたら、ログインせなアカン。

面倒なので、パスしてごめんなさい。

ここで言っておくので、拾ってください。他人任せ。

WPの人も日本語化プロジェクトの人もごめんなさい。

関係ないけど、twitterのjson読み込みが遅い。

色々表示が遅い。けど、遅い。

仕事でなら、100%使えないね、怒られるね。