Tagged: PHP RSS

  • fifnel 21:30:49 on 2008/10/9 Thursday パーマリンク | 返信 | hatena button hatena count | retweet buttonReTweet
    Tags: , , PHP, ,   

    色々な言語でGoogle Protocol Buffers 

    Google謹製のバイナリシリアライズライブラリ「Google Protocol Buffers」を色々と調査中。

    データ構造をC言語の構造体っぽい書式で書くと、それを元に色々な言語のシリアライズ/デシリアライズのプログラムコードを自動生成してくれるという素敵なライブラリです。

    しかし、「色々な言語」と書きましたが、現状ではC++、Java、Pythonの3言語しか対応していません。

    というわけで、それ以外の言語に対応させているプロジェクトをざっくり検索してみたのでメモっときます。

    オリジナル(C++,Java,Python)
    protobuf – Google Code

    C言語(not C++)
    protobuf-c – Google Code

    Perl
    protobuf-perl – Google Code

    protobuf-perlxs – Google Code

    Ruby
    ruby-protobuf – Google Code

    PHP
    pb4php – Google Code

    JavaScript
    protobuf-js – Google Code

    ActionScript
    protocol-buffers-actionscript – Google Code

    Common Lisp
    common-lisp-protobuf – Google Code

    cl-protobuf – Google Code

    .NET Framework
    protobuf-net – Google Code

    protosharp – Google Code

    Mercury
    protobuf-mercury – Google Code

    PHPが使いたいのでソースはPHPしか読んでませんが、parser/pb_parser.phpでシリアライズ用のコードを生成して、それを使うのに必要なライブラリがmessage以下に詰まってる感じですかね。

     
  • fifnel 22:19:56 on 2008/3/4 Tuesday パーマリンク | 返信 | hatena button hatena count | retweet buttonReTweet
    Tags: PHP   

    phpBB 3.0にRSS対応のmodを入れてみた 

    phpBB ? View topic – [RC1] Full Syndication Suite 1.0.RC1 (RSS/ATOM)

    2.x対応のmodなら結構あるんですが、最近出たばかりの3.0でまともに動くmodはこれくらいしか見あたりませんでした。

    他のRSS対応modに比べると若干導入が手間ですが、その価値はありました。
    これはフォーラムにRSSのアイコンが表示され、そこをクリックするとRSSの出力形式をユーザーが選択できるようなMODなので、非常に使いやすいです。

    以前、古いバージョンを入れていたときはどうもFeedの中身がおかしいことがあったのですが、最新版を入れたら治りました。
    デフォルトだとATOMになっていますが、RSS2にすると良い感じです。

    言語ファイルがenに入っているので、日本語版を使っているのでしたらjaの方を更新すれば問題なく動きます。

     
  • fifnel 11:12:53 on 2008/2/13 Wednesday パーマリンク | 返信 | hatena button hatena count | retweet buttonReTweet
    Tags: PHP, , ,   

    wp-mb_mailにタグ、カテゴリ指定機能を追加してみました 

    WordPressにケータイメールから投稿するためのスクリプトを組もうと色々調べていたのですが、私が作りたかったものとほとんど同じ物が公開されていたのでそちらを改造することにしました。

    改造元になったのは以下で公開されているwp-mb_mailです。
    SPaiS.jp – Wordpress のマルチバイト文字対応メール投稿(3)

    これに、カテゴリ及びタグを指定できるよう改造をしました。

    また、SOMY Mobile Gateを手本に、投稿用メールを作成するためのフォームも用意しました。

    フォームですが、アクセスするとこんな画面でカテゴリの選択が出来ます。
    カテゴリ選択

    カテゴリを選択して「送信」すると、こんな画面になって、メール作成及びBlog更新が出来ます。
    メール作成

    メール作成をクリックすると、メーラが立ち上がり以下のような内容がすでに書かれていますので、内容等を書きます。

    cat:日記,秋葉原
    tag:ゲーム,PS2
    今日は秋葉原のお店でPS2のゲームを買いました。
    今月もピンチです。

    そして、このメールを送信したらStep.3のBlog更新にアクセスすると更新されます。

    設置方法等

    wp-mb_mail.phpの設定方法はオリジナルに準拠します。
    フォーム(wp-mb_mail_form.php)の方はたいした設定項目はありませんので、ソースを見てください。
    必ず設定する項目は投稿先メールアドレスくらいです。

    設置場所ですが、WordPressのディレクトリ直下に置けばたぶんそのまま動きますが、それ以外の場所に置く場合はソース中でrequireされているwp-config.phpのパスを適切に書き換えてください。

    セキュリティに関してですが、投稿用のメールアドレスは他人に分からないよう注意してください。
    また、投稿用メール作成フォームも当たり前ですが投稿用メールアドレスが書かれていますので、同じく他人に分からないようURLを適当に変更してください。

    ただ、仮にバレても不本意な投稿がされるだけで、これまでの投稿内容が消されると言ったことはありません。

    どうしても気になる方は、Basic認証をかけるか、wp-mb_mail.phpの投稿時ステータスをpublishではなくdraftに設定してください。

    ダウンロード

    ダウンロードは以下からお願いします。
    wp-mb_mail.0.2.4.f0.1

    もし分からないことがありましたらコメント欄にてお知らせください。

     
  • fifnel 2:14:45 on 2008/2/10 Sunday パーマリンク | 返信 | hatena button hatena count | retweet buttonReTweet
    Tags: PHP, ,   

    81行から成るWordPressの自作投稿フォーム 

    モバイルからの投稿を最終目標に色々調べていますが、WP投稿用のAPIがあるので楽ですね。
    難点はAPIに関するドキュメントが少ない‥‥というか現行バージョンのタグ周りに関しては皆無に近いので、コードを読んで使い方を調べないと‥‥ってくらいですが、PHPのコードを読む勉強になるので良しとしましょう。

    んで、とりあえず投稿だけするスクリプトをテストで作りました。
    ユーザー認証もサニタイズも文字コード変換もしてないですが、テストなのでその辺はご愛敬。

    WPへの投稿は基本的に配列に色々つっこんで、wp_insert_post()の呼び出しでOK。
    成功すればポストID(管理ページで見られる各記事の番号)が帰ってきて、失敗したら0。

    iG:Syntax Hiliterのテストをかねてソースを貼ってみる。

    PHP:
    1. <?php
    2. // これをするだけでWordPressのAPIが呼び出し放題!
    3. require_once '../../wp-config.php';
    4. ?>
    5. <html>
    6.   <head>
    7.     <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
    8.   </head>
    9.   <body>
    10.     <h1>WP投稿テスト</h1>
    11.     <form method="post" action="index.php">
    12.       <table border="0">
    13.         <tr>
    14.           <td>タイトル</td>
    15.           <td><input type="text" name="title" value="" /></td>
    16.         </tr>
    17.         <tr>
    18.           <td>内容</td>
    19.           <td><textarea name="content"></textarea></td>
    20.         </tr>
    21.         <tr>
    22.           <td>投稿者名</td>
    23.           <td><input type="text" name="author" value="" /></td>
    24.         </tr>
    25.         <tr>
    26.           <td>タイプ</td>
    27.           <td><input type="text" name="type" value="post" /></td>
    28.         </tr>
    29.         <tr>
    30.           <td>ステータス</td>
    31.           <td><input type="text" name="status" value="publish" /></td>
    32.         </tr>
    33.         <tr>
    34.           <td>閲覧パスワード</td>
    35.           <td><input type="text" name="password" value="" /></td>
    36.         </tr>
    37.         <tr>
    38.           <td>カテゴリ</td>
    39.           <td>
    40. <?php
    41. $categories = get_categories();
    42. foreach( $categories as $category )
    43.     echo '<input type="checkbox" name="categories[]" value="'.$category->cat_ID.'" />'.$category->cat_name . '<br />' . "\n";
    44. ?>
    45.           </td>
    46.         </tr>
    47.         <tr>
    48.           <td>日付</td>
    49.           <td><input type="text" name="date" value="" /></td>
    50.         </tr>
    51.         <tr>
    52.           <td>タグ</td>
    53.           <td><input type="text" name="tags" value="test,foo" /></td>
    54.         </tr>
    55.       </table>
    56.     <input type="submit" value="送信">
    57.     </form>
    58.  
    59. <?php
    60. // とりあえずタイトルと本文は必須ってことにしとく
    61. if( $_POST['title'] == '' ||  $_POST['content'] == '' )
    62.     exit;
    63.  
    64. $postarr['post_status']     = $_POST['status'];    // publish, draft, private, inherit, future
    65. $postarr['post_type']       = $_POST['type'];      // post, page, attachment
    66. $postarr['post_author']     = get_profile('ID', $_POST['author']);
    67. $postarr['post_password']   = $_POST['password'];
    68. $postarr['post_category']   = $_POST['categories'];
    69. $postarr['post_content']    = $_POST['content'];
    70. $postarr['post_title']      = $_POST['title'];
    71. $postarr['post_date']       = $_POST['date'];
    72. $postarr['tags_input']      = split(',', $_POST['tags'] );
    73. $postarr['post_excerpt']    = ' '// とりあえず空っぽにしとく
    74.  
    75. if( wp_insert_post($postarr) == 0 )
    76.     echo '<div style="color:#ff0000">投稿失敗!!</div>';
    77. else
    78.     echo '<div style="color:#ff0000">投稿成功しました</div>';
    79. ?>
    80.   </body>
    81. </html>

     
  • fifnel 11:06:19 on 2008/2/8 Friday パーマリンク | 返信 | hatena button hatena count | retweet buttonReTweet
    Tags: PHP   

    PHPのPEARは再配布OKという事で一安心 

    PEAR/PECL で使用できるライセンスは? - PHPプロ!マニュアル

    PEAR :: The PEAR Group: License Announcement

    PHPのライブラリのPEARって便利そうな気がするんですが、どこのサーバにも入ってるとは限らないので、使うときは再配布しちゃいたいなぁ、と思ってちょっとググってみました。

    そしたら、

    • PHP
    • Apache
    • LGPL
    • BSD style
    • MIT

    のいずれかのライセンスで再配布可能とのこと。

    PEAR使うか分からんけど、とりあえず良かった良かった。

     
  • fifnel 10:28:54 on 2008/2/6 Wednesday パーマリンク | 返信 | hatena button hatena count | retweet buttonReTweet
    Tags: PHP, xyzzy, ,   

    xyzzyでPHPを書く下準備 

    今までまともにPHPを書いたことが無かったので、開発環境を整え中。

    サーバー周りはxamppであっさり解決。
    インストールしたフォルダのhtdocsの下にhtmlとかとか置けば、ttp://localhost/hoge.htmlで見られます。楽ちん。

    で、問題はソースの編集。
    私はxyzzyを愛用しているので、php-modeをこちらのサイトから拝借してインストール。

    私のコーディングスタイルはBSDなのだけど
    ↓こんなの

    if( hoge == true )
    {  // ←中カッコは次の行に書く
        print("hogeでした!\n");
    }
    

    そのまま使うと自動インデントの中カッコの位置がおかしい。

    if( hoge == true )
      {  // ←ここ
        print("hogeでした!\n");
      }  // ←ここも
    

    Wikipediaによればホワイトスミスのスタイルというらしいけど、慣れない物はキモチワルイのでナントカしたいわけです。

    で、調べてみたら、以下のサイトに書かれている変数(っていうのか?)を書き換えてあげれば良さげだということが判明。

    xyzzy --- C言語モード

    これを参考に、php-mode.lの「(defun php-mode ()」の後あたりに

      (setq c-indent-level 4)
      (setq c-continued-statement-offset 4)
      (setq c-argdecl-indent 4)
      (setq c-brace-offset -4)
      (setq c-brace-imaginary-offset 0)
      (setq c-label-offset -4)
    

    って感じにしたらBSDスタイルになった!やったー!

    あと、昨日は何ともタイムリーに
    jkondoに憧れて ? 超手抜きでウェブサイトをモバイル対応 2008
    なんてホッテントリがあったので参考にしたいと思う。

    Shift_JIS切り捨ててUTF-8だけで行こうっと。

     
  • fifnel 12:04:01 on 2008/2/3 Sunday パーマリンク | 返信 | hatena button hatena count | retweet buttonReTweet
    Tags: PHP, ,   

    WordPress2.3.2でも動くようにmobile gateを改造してみた 

    WordPressに携帯電話から投稿する方法について色々検索していたのですが、標準のwp-mail.phpは少なくともauからメールを送信すると文字化けをするので使えないと判断。

    日本人の方が製作をしたツールをいくつか発見しましたが、「SOMY Mobile Gate ベータv0.15」を使うことにしました。

    どのソフトも基本的にケータイからメールを送信してWordPressに投稿するという作りなのですが、SOMY Mobile Gateはそのメールを生成するフォームを持っていたのが楽で気に入りました。

    しかし、WordPress2.3.2にインストールしたところ、カテゴリの選択がうまく機能していませんでした。

    そのほか、いくつか修正した項目があるので、それぞれ見出しをつけてまとめてみました。

    カテゴリの修正

    module/ez-mail.php

    37行目

    変更前

    function EZMail_Get_CategoryList() {
    	global $tablecategories,$wpdb;
    	return $wpdb->get_results("SELECT cat_ID,cat_name,category_nicename FROM $tablecategories");
    
    }

    変更後

    function EZMail_Get_CategoryList() {
        return get_terms('category',"get=all");
    }
    

    42行目

    変更前

    function EZMail_Get_CategoryName($category_ID) {
    	global $tablecategories,$wpdb;
    
    	if($category_ID == 'multi_set')
    		return "複数カテゴリ設定";
    	return $wpdb->get_var("SELECT cat_name FROM $tablecategories WHERE cat_ID = $category_ID");
    }
    

    変更後

    function EZMail_Get_CategoryName($category_ID) {
    	if($category_ID == 'multi_set')
    		return "複数カテゴリ設定";
    	$term = get_term($category_ID, 'category');
    	if($term)
    		return $term->name;
    	else
    		return "";
    }
    

    56行目
    変更前

    		$Category_STR .= "\t\t\t\t<option value=\"$category->cat_ID\">$category->cat_name</option>\n";
    

    変更後

    		$Category_STR .= "\t\t\t\t<option value=\"$category->term_id\">$category->name</option^gt;\n";
    

    107行目
    変更前

    		$Category_STR .= "<input type=\"checkbox\" name=\"multicate_$category->cat_ID\" value=\"$category->cat_ID\"><font size=\"1\">$category->cat_name</font><br />\n";
    

    変更後

    		$Category_STR .= "<input type=\"checkbox\" name=\"multicate_$category->term_id\" value=\"$category->term_id\"><font size=\"1\">$category->name</font><br />\n";
    

    あと、上記56行目変更付近で、個人的に以下の変更も加えました。
    カテゴリ選択時の一番上にデフォルト(設定画面で指定したカテゴリ)と、複数カテゴリを持ってきました。

    変更前

    	$categories = EZMail_Get_CategoryList();
    	foreach ($categories as $category) {
    		$Category_STR .= "\t\t\t\t<option value=\"$category->cat_ID\">$category->cat_name</option>\n";
    	}
    	$Category_STR .= "\t\t\t\t<option value=multi>■複数カテゴリ■</option>\n";
    

    変更後

    	$categories = EZMail_Get_CategoryList();
    	$Category_STR .= "\t\t\t\t<option value=\"\">(デフォルト)</option>\n";
    	$Category_STR .= "\t\t\t\t<option value=multi>■複数カテゴリ■</option>\n";
    	foreach ($categories as $category) {
    		$Category_STR .= "\t\t\t\t<option value=\"$category->term_id\">$category->name</option>\n";
    	}
    

    module/wp-mail.php

    450行目

    変更前

    function get_category_id_by_cat_name($cat_name) {
    	global $tablecategories, $wpdb;
    	return $wpdb->get_var("SELECT cat_ID FROM $tablecategories WHERE cat_name = '$cat_name'");
    }
    

    変更後

    function get_category_id_by_cat_name($cat_name) {
        return get_cat_ID($cat_name);
    }
    

    ログイン画面でユーザー名が表示されない件の修正

    最初の画面で「ようこそ さん」みたいに表示されていませんか?
    あまり実害は無いようでしたが、一応修正してみました。

    module/login.php

    72行目

    変更前

    function Login_Get_UserName($UserID) {
    	$UserData = Login_Get_UserData($UserID);
    	$UserDisplayMode = 'user_'.$UserData->user_idmode;
    	return $UserData->$UserDisplayMode;
    
    }
    

    変更後

    function Login_Get_UserName($UserID) {
    	$UserData = Login_Get_UserData($UserID);
    	return $UserData->display_name;
    }
    

    投稿時に文字化けするので修正

    xampp環境だと問題ないのですが、さくらインターネット環境だとどうも文字化けするんで、mb_convert_encoding()に元文字コードを明示的に設定してみたら治りました。

    wp-mail.php

    123行目

    変更前

    	$subject = htmlspecialchars(mb_convert_encoding($subject, get_settings('blog_charset'), "auto"));
    

    変更後

    	$subject = htmlspecialchars(mb_convert_encoding($subject, get_option('blog_charset'), "JIS"));
    

    171行目

    変更前

    	$content = mb_convert_encoding($content, get_settings('blog_charset'), "auto");
    

    変更後

    	$content = mb_convert_encoding($content, get_option('blog_charset'), "JIS");
    

    ImageMagickのパス変更

    ImageMagickのパスがソースに直で書かれていて機能していなかったので修正しておきました。
    これでサムネイルもばっちり作成されます。

    ちなみに、さくらインターネットでのパスです。

    wp-mail.php
    578行目

    変更前

    		$reimg_out = "/usr/X11R6/bin/convert -geometry " . $img_width . "x" . $img_height . " $img_path $reimg_thumb_path";
    

    変更後

    		$reimg_out = "/usr/local/bin/convert -geometry " . $img_width . "x" . $img_height . " $img_path $reimg_thumb_path";
    

    というわけで、ソースコード自体結構古いので、あちこち手を加えましたが、全体的にもう少しスッキリさせたい気がしています。
    なので、先日少しBlogにも書きましたが、WordPress2.3以降に向けたモバイル投稿用のスクリプトを組んでみたいと思います。

    少しずつ作っていくのでいつになるか分かりませんが、遅くとも今月中に形に出来たらいいなぁって感じです。

     
  • fifnel 21:24:47 on 2008/2/1 Friday パーマリンク | 返信 | hatena button hatena count | retweet buttonReTweet
    Tags: PHP,   

    PHPで脆弱なウェブアプリを組めるような自分に戻りたい 

    セキュリティ過敏症 - ぼくはまちちゃん!(Hatena)

    初心者はPHPで脆弱なウェブアプリをどんどん量産すべし

    私自身あまりPHPは触ったことはないのだけど、WordPressプラグインとかの人が書いたPHPのソースを弄くってるとなぜか懐かしい気分になります。

    たぶん、パソコンを買ったばかりの頃に弄くっていたN88-BASICや、インターネットを始めた頃に書いてはF5で再読込してチェックを繰り返して無理矢理書いていたHTMLに近い感覚だと思います。

    あの頃はただただ何かを作り出したくて、それを誰かに使ってもらいたくて、そして褒められたくて一生懸命でした。

    あれから10年以上経った今、あの頃のようにプログラミングを楽しめる感覚が薄れてきている気がします。
    もしかしてプログラマーとしてこれは致命的なのか?という気がしなくもないので、ちょっくらWordPressのモバイル投稿用のツールをPHPで作っていきたいと思います。

    わんぱくでもいい。
    (ソースコードや技術が)

    たくましく育って欲しい。
    (とにかく便利でおもしろいものになっておくれ)

     
  • fifnel 22:26:49 on 2008/1/29 Tuesday パーマリンク | 返信 | hatena button hatena count | retweet buttonReTweet
    Tags: PHP, ,   

    さくらインターネットのPHP5.x環境でFreshReaderを動かす方法 

    めでたく本日からさくらインターネットでPHP5が使えるようになりました。
    (少なくとも私の使ってるサーバーは)

    早速サーバー設定からバージョンを切り替えて、WordPressが無事動くことを確認。

    意外にチョロいなーと思ってFreshReaderを見てみると、動かない‥‥
    表示されるエラー画面を見ると、どうやらモジュールが読み込めていないようです。

    FreshReaderのエラー

    さくらインターネットでは各自のWeb用ディレクトリのphp.iniを編集できるようになっていますが、表示されているとおりに設定するも状況変わらず。

    .htaccessに設定する方法も書かれていますが、そもそもさくらインターネットでは使えない機能なのでNG。

    で色々調べた結果、どうも表示されている書式がさくらインターネットには合わないようでした。

    zend_extension_ts = /home/xxxx/hoge/freshreader/ioncube/ioncube_loader_fre_5.2_ts.so
    

    ではなく、

    zend_extension = /home/xxxx/hoge/freshreader/ioncube/ioncube_loader_fre_5.2.so

    とすれば動きました。
    _tsを消すだけです。

    phpinfo()したら、「Thread Safety disabled」と表示されていたので、これはもしやと思ったらビンゴっぽかったです。

     
c
新規投稿作成
j
次の投稿 / 次のコメント
k
前の投稿 / 前のコメント
r
返信
e
編集
o
コメントを表示する / 隠す
t
トップへ移動
l
go to login
h
show/hide help
esc
キャンセル