gonishi

  • im.kayac.comでiPhoneにtwitterをプッシュ通知するphpソースコードサンプル

    特定のユーザのtwitterの投稿をiPhoneにプッシュ通知してくれるアプリが欲しい。
    そういうアプリはなさそうなので、本当はそういうアプリを作りたかったのだけれど、大変そうなのでim.kayac.comとphpとcronで実現してみた。
    im.kayac.com(App Store)
    このiPhoneアプリはいろいろ便利。プログラムかければいろんなのをプッシュ通知できる。

    以下サンプルソース。変なところがあったら教えて欲しい。
    これをcronで5分毎に実行する。
    (cronで実行するときは、1行目に#!/usr/local/bin/phpって書く)

    created_at);
    	$content = date("Y/m/d H:i",$timestamp)."@";
    	// 名前
    	$content .= $message->user->name.">>";
    	// 内容
    	$content .= $message->text."";
    
    	// imkayacを使ってプッシュ
    	imkayac($content);
    	return;
    }
    
    // http://project-p.jp/halt/anubis/blog_show/1269をほぼそのまんま
    // cURLでできるんじゃなかろうか。
    function imkayac($message){
    
    	$data = array(
    	    "message" => $message,
    	    "password" => K_PASS,
    	);
    
    	$data['sig'] = sha1($data['message'] . K_SIG);
    	unset($data['password']);
    
    	$data = http_build_query($data, "", "&");
    
    	//header
    	$header = array(
    	    "Content-Type: application/x-www-form-urlencoded",
    	    "Content-Length: ".strlen($data)
    	);
    
    	$context = array(
    	    "http" => array(
    	        "method"  => "POST",
    	        "header"  => implode("\r\n", $header),
    	        "content" => $data
    	    )
    	);
    
    	$url = "http://im.kayac.com/api/post/".K_NAME;
    	file_get_contents($url, false, stream_context_create($context));
    	return;
    }
    
    
    // ログ取得(重複tweet読込回避)
    function getLog(){
    	$retval = array();
    	if( ($fp = fopen(LOG_FILE_NAME,"r+") ) ){
    		while (! feof($fp)) {
    			$line = fgets ($fp, 4096);
    			$data = explode(",", trim($line));
    			$retval[$data[0]] = $data[1];
    		}
    		fclose($fp);
    	}
    	return $retval;
    }
    
    // ログ保存(重複tweet読込回避)
    function saveLog($datas){
    	$log = '';
    	if(!empty($datas) && is_array($datas)){
    		foreach($datas as $name => $id){
    			if(!empty($name) && $id){
    				$log .= $name.",".$id."\n";
    			}
    		}
    	}
    	$fp = fopen(LOG_FILE_NAME,"w+");
    	flock($fp, LOCK_EX);
    	fputs($fp, $log);
    	flock($fp, LOCK_UN);
    	fclose($fp);
    	return;
    }
    
    // エラーログ保存(念のため)
    function saveErrLog($message){
    	$fp = fopen(ERRLOG_FILE_NAME,"a+");
    	$date = date('Y/m/d h:i:s');
    	$logmessage = $date." ".$message."\n";
    	flock($fp, LOCK_EX);
    	fputs($fp, $logmessage);
    	flock($fp, LOCK_UN);
    	fclose($fp);
    	return;
    }
    
    // 重複取得回避用
    $logs = getLog();
    
    foreach($tnames as $tname){
    	// 重複取得回避用
    	if(!empty($logs[$tname])){
    		$since_id = "?since_id=".$logs[$tname];
    	} else {
    		$since_id = "";
    	}
    
    	// 特定のユーザーのタイムライン取得用API
    	$apiURL = "http://api.twitter.com/1/statuses/user_timeline/".$tname.".xml".$since_id;
    
    	// cURLを使ってXML取得
    	$ch = curl_init(); 
    	curl_setopt($ch, CURLOPT_URL, $apiURL);
    	curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 2);
    	curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    	$retXML = curl_exec($ch); 
    	curl_close($ch);
    
    	// 取得したXMLを解析
    	if(!empty($retXML) && ereg("^<\?xml", $retXML) && 
    	   $xml = simplexml_load_string($retXML)
    	){
    		if($xml->status){
    			foreach($xml->status as $message){
    				// 重複取得回避用
    				if($logs[$tname] <= $message->id){
    					$logs[$tname] = $message->id;
    				}
    				// 取得したTLを出力
    				outMessage($message);
    			}
    		}
    	} else {
    		// 一応エラーログ記録
    		saveErrLog("xml取得失敗");
    	}
    }
    
    // 重複取得回避用
    saveLog($logs);
    ?>
    

    twiiterAPIと通信する部分をいろいろ変えればReplyとかmentionとかだけ取得することも可能。
    そんときはログインも必要になるので、「phpでTwitterをハンドリングするサンプル」を参考に変えたらいいと思う。
    他に欲しい情報とかあったら、Twitter API Wikiのサイトをみればだいたい分かる。
    英語読めなくても結構わかる。

    ※参考サイト

  • Artisteer – WordPressナビゲーションメニューの調整

    aritsteer使ってる人ってあまりいないのだろうか。日本語の情報が少ない。

    artisteerの作ったテーマを適用した場合、静的ページを作成したらそれがナビゲーションにメニューに自動的に表示されてとても便利。
    でもメニューが増えてくると邪魔。
    なのでそういうときは、テーマを編集する。
    functions.php内に、art_menu_items()という関数があるのでそのwp_list_pagesのパラメータを以下のように編集。

    変更前。

    wp_list_pages(‘title_li=&sort_column=menu_order);

    変更後。

    wp_list_pages(‘title_li=&sort_column=menu_order&include=9,26,43,50,53’);

    includeの後に表示させたいページIDをカンマ区切りで入れていけばOK。
    ページIDは、管理画面の「ページ」から編集したい画面を選択するとURLがpost=xxとなってるのでその番号を記載する。
    表示させたくないページだけ表示させないようにする場合はinclude→excludeにしてIDを指定する。
    こんな感じ。

    wp_list_pages(‘title_li=&sort_column=menu_order&exclude=3,4’);

    参考サイト

  • Thunderbirdでcp932の文字化け対策

    Thunderbird(windows)でcharset=CP932のメールもらうと文字化けする。
    で、対処方法みつけたのでメモ。

    C:\Program Files\Mozilla Thunderbird\resフォルダのcharsetalias.propertiesというファイルを編集すればOK

    #
    # Aliases for Shift_JIS
    #
    x-sjis=Shift_JIS
    shift-jis=Shift_JIS
    ms_kanji=Shift_JIS
    csshiftjis=Shift_JIS
    windows-31j=Shift_JIS

    ↑の部分に以下の行を追加。

    cp932=Shift_JIS

    再起動したら文字化けしなくなってました。
    厳密にはこの二つの文字コードは違うものらしいのだけれど、とりあえずこれで見られるようになったのでOKということで。

    charset=CP932の文字コードはどうやらMac OS X のMail.app使ってるとそうなるらしい。
    メールを送る人がCP932をやめてくれればいいのだけれど、言えないときもよくあるので、そんなときはこの対策。

  • Thunderbirdでhtml形式の変換を避ける

    「返信」ボタンを押すと、html形式で編集が始まる

    メーラーはThunderbirdを使ってます。
    「返信」ボタンを押すと、たまに勝手にhtml形式で編集が始まります。
    原因はよくわからない。たまにそうなる。そんなの耐えられない。
    それを回避する方法を探してたんだけど、どこにも設定がなくて・・・。
    あきらめかけたところで

    「ツール」⇒「オプション」⇒「詳細」⇒「一般」⇒「設定エディタ」を発見。

    それらしい言葉(htmlとかeditor)のところを見当つけて、一個ずついじってやっと発見。
    忘れてしまうと、もったいないのでメモ。

    「設定エディタ」で値を変更

    mail.identity.default.compose_html

    これをfalseにすればいいっぽい。

    いまだにhtmlのメールがキライで全部text形式で送ってます。
    相手に届くメールの内容が意図しない形に編集されるのは嫌だ。

    残りの課題

    ISO-8859-1って何?

    実はもう一個解決したい問題があって、これも「返信」を書いてるときなんだけど、「西欧(ISO-8859-1)」で編集が始まります。
    それだけなら何の問題もないのだけれど、しばらくすると「UTF-8で送信したほうがいいよ」みたいな警告が出てきます。
    警告がじゃまなので、常にUTF-8で編集するように設定したいのだけれど、設定の仕方がわからない。

  • googleでアンケート

    googleドキュメントにフォームの作成機能が便利な件。
    イベントを開催して参加者の申し込みを受け付けるときは、たいてい無料フォームメールのサービスを使うのだけれど、googleの「フォーム作成」を使ったら便利そう。

    フォームの作成
    フォームの作成
    編集画面
    編集画面
    アンケート画面
    アンケート画面

    無料フォームメールサービス(以下、FMS)とGoogleドキュメントのフォーム作成機能(Google Form)を比較してみた。
    まずは申し込みを受け付けるフォームとしての利用。

    FMS Google Form
    見た目 ある程度自由 変更できない。でもシンプルでカッコイイ
    広告 広告が入る 広告なし
    フォームの作成 カッコイイものを作ろうとすると、ある程度HTMLの知識が必要 HTMLの知識必要なし
    集計 一回一回CSV形式でダウンロードして集計 GoogleDocsからすぐに集計可能。概要機能もあり。

    sample

    たとえば↓みたいなのがったら騙されそう
    読込中…

    ↓こういうのも出来る
    読込中…

  • WindowsでTortoiseSVNを使う

    さくらにSubversionをインストールの続きの記事。
    さくらインターネットのレンタルサーバ(スタンダードプラン)にsubversionをインストールしてある前提で話を進めます。
    WindowsのバージョンはXP SP3です。

    Windowに以下をインストールして設定。

    • puttyごった煮版
    • TortoiseSVN

    鍵認証でssh接続するので鍵の生成と管理用にputtyもインストールします。
    私の場合は複数の接続先(さくらのスタンダードプランを2つ契約してる)でSVNを使ってるので、鍵を使いわけるためputtyごった煮版を使用してます。
    なのでToroiseSVNのsshクライアントの設定とレポジトリのURLが他のサイトと少し違うかも。

    • sshクライアントの設定
    • “C:\Program Files\TortoiseSVN\bin\TortoisePlink.exe” -l XXXXX -i “C:\Program Files\TortoiseSVN\bin\id_rsa.ppk”
      [sshクライアント] -l [ユーザID] -i [秘密鍵]

    • レポジトリのURL
    • svn+ssh://XXXXX.sakura.ne.jp/home/XXXXX/repo/test
      svn+ssh://[アドレス]/[リポジトリがあるディレクトリのパス]

    となっているところが

    • sshクライアントの設定
    • “C:\Program Files\Putty\Plinkw.exe”
      [sshクライアント]

    • レポジトリのURL
    • svn+ssh://XXXXX@XXXXX.sakura.ne.jp/home/XXXXX/repo/test
      svn+ssh://[ユーザID]@[アドレス]/[リポジトリがあるディレクトリのパス]

    になります。

    以下詳細を説明していきます。

    puttyごった煮版をインストール

    http://yebisuya.dip.jp/Software/PuTTY/
    からインストール版をダウンロードしてインストールします。
    手順は省略(^^;)

    TortoiseSVNをインストール

    インストール方法はhttp://www.gside.org/Gentoo/subversion/subversion_client.htmlに載ってるのでそちらをみてください(^^;)
    わかりやすいです。

    ssh接続のための設定

    svn+sshで接続するので、その設定を書いておきます。

    鍵の生成

    PuTTYgenを起動します。
    場所は「すべてのプログラム」→「PuTTYごった煮版」→「PuTTYgen」。

    鍵の生成
    鍵の生成

    「生成」ボタンを押して鍵生成。
    マウスを適当に動かしてるとゲージが動いて鍵が生成される。

    公開鍵の保存
    公開鍵の保存

    公開鍵の部分をコピーしてメモ帳などのエディタを開いてペースト。
    「authorized_keys」という名前で保存。
    これをサーバの /home/xxxxx/.ssh ディレクトリの中にアップロード。
    もちろんxxxxxは自分のIDに置き換えてください。

    秘密鍵の保存
    秘密鍵の保存

    「秘密鍵の保存」をクリックすると警告が出るけど、「はい」を押して適当な名前(とりあえず「id_rsa.ppk」で)をつけて保存。
    場所は自分でわかりやすい場所で。
    秘密鍵は厳重に管理してください。最悪の場合サイトがのっとられてしまいます。
    本来なら秘密鍵にはパスワードをかけるべきです。
    パスワードをかけておけば万が一秘密鍵がとられてしまった場合でも”少し”安心です。
    心配な方はパスワードをかけてください。
    パスワードを設定する場合は、「鍵のパスフレーズ」にパスワードを入力すれば設定できます。
    ただしパスワードを設定すると毎回接続するときにパスワードを入力しないといけなくなります。
    この辺は自己責任で。

    次にPageantを起動。
    場所は、「すべてのプログラム」→「PuTTYごった煮版」→「Pageant」。
    ※Pageantを起動して鍵を設定する操作はPC立ち上げ後、TortoiseSVNを使う前に毎回行わないとだめ。
    面倒だからなんとかならないかな。

    pageantの起動
    pageantの起動

    PCに斜め線が入ったアイコンをクリックor右クリックして「鍵の追加」をします。

    pageant鍵の追加
    pageant鍵の追加

    で先ほど生成した秘密鍵「id_rsa.ppk」を追加。

    TortoiseSVNの設定

    適当なフォルダ(なんでもOK)で右クリック。

    Tortoiseの設定
    Tortoiseの設定

    「TortoiseSVN」→「設定」を選択。

    sshクライアント設定
    sshクライアント設定

    「ネットワーク」のsshクライアント設定の項目に「”C:\Program Files\Putty\Plinkw.exe”」と記入して「OK」をクリック。

    TortoiseSVNを使ってチェックアウトとかコミットとか

    TortoiseSVNを使ってバージョン管理するときの基本的な手順は以下。

    1. リポジトリを作ってサーバにアップロード
    2. リポジトリからチェックアウト
    3. ファイル(.phpとか.cとか)を作成してコミット
    4. ファイル(.phpとか.cとか)を変更・作成してコミット
    5. ファイル(.phpとか.cとか)を・・・以下ずっと続く

    最初の2つをちょっとだけ詳しく書きます。

    TortoiseSVNリポジトリの作成
    TortoiseSVNリポジトリの作成

    中身が空っぽのフォルダを作って、そのフォルダを右クリック。
    「TortoiseSVN」→「リポジトリ作成」でリポジトリを作る。
    リポジトリの種類は「Native filesystem(FSFS)」を選択。
    フォルダ内にいくつかファイルが出来てるので全て /home/xxxxx/repo/test ディレクトリに入れる。(mkdirコマンドでディレクトリを作っておく)
    xxxxxは自分のIDに置き換えてください。

    これでリポジトリは作れたので次はチェックアウト。

    SVNチェックアウト
    SVNチェックアウト

    これからプロジェクトで使うフォルダを右クリックして「SVNチェックアウト」をクリック。

    SVNチェックアウト設定
    SVNチェックアウト設定

    リポジトリのURLに「svn+ssh://XXXXX@XXXXX.sakura.ne.jp/home/XXXXX/repo/test」と入力。
    xxxxxは自分のIDに置き換えてください。

    参考サイト

    1. putty→http://yebisuya.dip.jp/Software/PuTTY/
    2. TortoiseSVN→http://www.gside.org/Gentoo/subversion/subversion_client.html
    3. Totoise複数の鍵の使い分け→http://sfi.hamazo.tv/e1317475.html
  • さくらにsubversionをインストール

    さくらインターネットのレンタルサーバ(スタンダードプラン)にsubversionをインストールする方法のメモです。

    プログラムのバージョン管理は、使い慣れてるSubversionを使用。
    サーバ側にsubversionをインストールして、クライアントはWindowsXPでToroiseSVNを使います。
    サーバのOSはFreeBSD 6.1-RELEASE-p24 i386。

    サーバにsubversionをインストールする

    以下の3つが必要。

    1. subversion
    2. apr
    3. apr-util

    検索したらswigとかneonも必要って書いてあったけど、上の3つだけで使えました。

    subversionダウンロードして解凍

    最新版はhttp://subversion.tigris.org/から、たどれば持ってこれます。
    .tar.bz2でも.tar.gzでも.zipでもお好きなものを。
    今回は1.5.2の.tar.gzを持ってきてインストール。

    mkdir -p $HOME/local/src
    cd $HOME/local/src
    wget http://subversion.tigris.org/downloads/subversion-1.5.2.tar.gz
    tar xzf subversion-1.5.2.tar.gz

    APRとAPR-Utilをダウンロードして解凍

    subversionは1.4.0移行だとAPRとAPR-Utilが入ってなくて
    makeできないのでAPRとAPR-Utilをダウンロード。
    最新版はもっと新しいけれど、subversionをconfigureしたときに
    0.9.xを入れろと書いてあったので0.9.xの最新を持ってくる。
    最新版はhttp://apr.apache.org/から0.9.XのところのDownloadをクリックしてたどれば持ってこられます。

    cd $HOME/local/src
    wget http://www.meisei-u.ac.jp/mirror/apache/dist/apr/apr-0.9.17.tar.gz
    tar xzf apr-0.9.17.tar.gz
    wget http://www.meisei-u.ac.jp/mirror/apache/dist/apr/apr-util-0.9.15.tar.gz
    tar xzf apr-util-0.9.15.tar.gz

    解凍した中身をsubversionのディレクトリにコピー。

    cd $HOME/local/src
    mkdir subversion-1.5.2/apr
    mkdir subversion-1.5.2/apr-util
    cp -rf apr-0.9.17/* subversion-1.5.2/apr
    cp -rf apr-util-0.9.15/* subversion-1.5.2/apr-util

    subversionインストール

    cd $HOME/local/src
    cd subversion-1.5.2
    ./configure --prefix=$HOME/local
    make && make install

    configureはこれだけでいいのか不安。
    でもこれで使えました。

    windowsの設定は、WindowsでTortoiseSVNを使うに書いておきました。

    参考サイト

  • さくらインターネット共有サーバにWordPressを設置

    さくらインターネット共有サーバ(スタンダードプラン)でWordPressが動くようになるまでのメモ。
    難しいところはなさそうなので、手順だけずらっとメモしておきます。

    WordPressインストール手順

    DBの準備

    さくらのコントロールパネル「アプリケーションの設定」の「データベースの設定」からボタン押すだけ。

    WordPerssのダウンロード

    WordPress 日本語ローカルサイトから最新版(この記事を書いてるときは2.6.5)をダウンロード

    展開してconfig.phpにDBの設定を書く

    日本語ドキュメントがあるのでつまづきそうになったらそこを読めば大丈夫。

    http://サイトURL/wp-admin/install.phpにアクセスしてサイト名とメールアドレスを入力

    以上で、終わり。
    古い記事だとphpのパーミッション変えるとか書いてあったけど、やらなくても(644のままで)大丈夫でした。