Home > Tags > PHP

PHP

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

  • 2008-03-04 (火)
  • IT

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の方を更新すれば問題なく動きます。

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

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

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 id="toc-wp">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>

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

  • 2008-02-08 (金)
  • IT

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

PEAR :: The PEAR Group: License Announcement

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

そしたら、

  • PHP
  • Apache
  • LGPL
  • BSD style
  • MIT

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

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

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だけで行こうっと。

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以降に向けたモバイル投稿用のスクリプトを組んでみたいと思います。

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

[1/2] »

Home > Tags > PHP

その他諸々

あわせて読みたい

  • 個人的リンク集
  • mixi
  • twitter
  • track feed
  • ページランク

Return to page top