Hatena::ブログ(Diary)

130単位

2010-09-29

WordPress カスタムフィールド拡張プラグイン 2種類比較

Custom Field GUI Utility 3

no title

  • Ver3.0.5
  • iniファイルに設定保存
  • カスタムフィールドごとに投稿タイプ切り替え
  • カスタム投稿タイプ非対応
    • 以下をfunctions.php等に記述すればok
<?php
if (class_exists('cfg_utility_class')) {
    //'post_type'がカスタム投稿タイプのキー('news'なら'news'にする)
    add_meta_box('cfg_utility', $box_name, array('cfg_utility_class', 'insert_gui'), 'post_type', 'normal', 'high');
}

Custom Field Template

Custom Field Template plugin | WordPressで企業ウェブサイト作成・商用ホームページ制作 WordPress Go Go

雑感

Custom Field GUI Utility 3はシンプルで手軽、Custom Field Templateは多機能だけどやや煩雑、という印象です。項目数は少ないものの、カスタム投稿タイプの絡んだ案件にて比較検討しましたが、今回はCustom Field GUI Utility 3を採用しました。

PHPによるWordPressカスタマイズブック

WordPress 3サイト構築スタイルブック


【関連記事】
Twitter Tools2.4のカスタマイズ フィルターフック版 - 130単位
WordPress DBバックアッププラグイン 2種類比較 - 130単位
WordPress 3.0 カスタム投稿タイプの記事一覧表示 - 130単位

2010-09-28

CakePHP HTML_Emojiで絵文字変換

携帯絵文字変換ライブラリ HTML_Emoji - libemoji.com 
http://libemoji.com/html_emoji

仕様

コード

HTML_Emojiをvendorsに配置して、AppControllerのみでいけます。

<?php
class AppController extends Controller {

    function __construct() {
        App::import('vendor', 'HTML_Emoji', array('file' => 'HTML' . DS . 'Emoji.php'));
        $emoji = HTML_Emoji::getInstance();
        if ($emoji->isMobile()) {
            if ($emoji->isSjisCarrier()) {
                header('Content-Type: application/xhtml+xml; charset=Shift_JIS');
            }
            else {
                header('Content-Type: application/xhtml+xml; charset=UTF-8');
            }
        }
        else {
            die('mobile only.');
        }
        parent::__construct();
    }

    function afterFilter() {
        $emoji = HTML_Emoji::getInstance();
        $this->output = $emoji->filter($this->output, array('HexToUtf8', 'Output'));
    }
}

説明

  • PCをはじくためコンストラクタで条件分岐
    • はじく必要なければafterFilter()にまとめて書くのが良さ気
  • afterFilter()でHTML_Emoji#filter()を利用して絵文字変換
おまけ
  • require_once(VENDORS . 'HTML' . DS . 'Emoji.php');よりも上記コードのApp::Import()のほうがすこし速い
    • 初回は時間かかるもののファイルキャッシュが効くため
追記 2011/02/04
  • DoCoMoのUnicode16進表記でなくDoCoMoのShift-JISバイナリ表記を使う
    • i絵文字で視認できる表記
  • HexToUtf8フィルタを省く

上記のようにしたほうが、コードの可読性も処理効率も高まるのでおすすめです。

関連リンク

と、ブログ書く前にググったらHTML_Emojiを組み込んだプラグインが既にありました><

k1LoW's yak at master - GitHub 
http://github.com/k1LoW/yak

Yet Another Plugins 
http://www.slideshare.net/k1LoW/cake-php-k1low

α版とのことですが、セッション管理もあって便利そうです。

CakePHP(ケイクピーエイチピー)辞典


【関連記事】
Ktai Library 0.3.2 AUでアクセスキー絵文字出力と絵文字自動変換の両立 - 130単位

2010-09-26

Croogoをインストールしてみた

Croogo | Free, Open Source, CakePHP Powered CMS 
http://www.croogo.org/

独自ドメインでポートフォリオ的なサイトを構想していて、CakePHPベースなCMSのCroogoを使ってみることにしました。

このへんが採用の理由です。

インストール手順

Errors | Croogo

<?php
class DATABASE_CONFIG {
        var $default = array(
                'driver' => 'mysql',
                'persistent' => false,
                'host' => 'localhost',
                'login' => 'user',
                'password' => 'password',
                'database' => 'croogo',
                'prefix' => '',
                'encoding' => 'UTF8',
                'port' => '3306',
        );
  • ダッシュボード(ログイン画面)にアクセス
    • http://example.com/admin
    • admin/passwordでログイン可能
    • 公開サイトであればすぐに変更すべき
      • ダッシュボードの Users > Edit より

雑感

  • ダッシュボードは直感的に操作可能
  • 問い合わせ機能標準搭載
  • Akismet標準搭載
  • Ajaxあまりつかわれてない
    • メニューの順序変更とかめんどい
  • WYSIWYG有効にしてるのに有効にならない
  • 編集反映したら一覧画面に遷移する
    • 編集画面のままか実サイトに遷移がいいと思う
  • ノードの存在意義がよくわからない
  • デフォルトのタイトル先頭にノードって付くのがマイナス
  • Aboutページだけパーマリンクにpage/がつかないのが謎
  • テンプレートどこでいじるのかわからない
    • 少なくともWebではいじれない
  • 総合的にはWordPressのほうが明らかに良い
    • シンプルなサイトやスポット的なサイトならCroogoもアリかも

そんなわけで、インストールからコンテンツ作成まで1時間半くらいでこんな感じです*1

http://deeeki.com/

f:id:deeeki:20100926071810j:image

ソースコードはまだ読んでませんが、CakePHP開発の参考にはなるんじゃないかと思います。

関連リンク

CakePHPをベースにしたCMS比較 - toyosystem 
http://www.jamboree.jp/cms/archives/848

MOONGIFT : CakePHPをベースにしたCMS「Croogo」 オープンソースソフトウェア/フリーウェアを毎日紹介 
http://www.moongift.jp/2009/11/croogo/

*1:サイト内の英語は適当です

2010-09-25

GitHubを初めて使ってみた (BitlyUtil)

というわけで。

Secure source code hosting and collaborative development - GitHub 
http://github.com/

アカウントは適当に登録して、gitインストールと初期設定はこちらを参考に。

MacでGithubにレポジトリを作ってアップロードするまでをまとめる - goryugo

ネタは以前作った簡易なクラスを少しだけ変更したものです。

bit.ly/j.mpのユーティリティクラス

no title

<?php
class BitlyUtil {
	const BITLY_USER = 'your-user-name';
	const BITLY_API_KEY = 'your-api-key';
	const SHORTEN_API = 'http://api.bit.ly/shorten?version=2.0.1&longUrl=%s&login=%s&apiKey=%s&format=json';
	const EXPAND_API = 'http://api.bit.ly/expand?version=2.0.1&shortUrl=%s&login=%s&apiKey=%s&format=json';

	public static function shorten($url) {
		$str = file_get_contents(sprintf(static::SHORTEN_API, $url, static::BITLY_USER, static::BITLY_API_KEY));
		$r = json_decode($str, true);
		if ($r['errorCode'] > 0) {
			throw new Exception('[ERROR]' . $r['errorMessage']);
		}
		$data = array_pop($r['results']);
		return $data['shortUrl'];
	}

	public static function expand($url) {
		$str = file_get_contents(sprintf(static::EXPAND_API, $url, static::BITLY_USER, static::BITLY_API_KEY));
		$r = json_decode($str, true);
		if ($r['errorCode'] > 0) {
			throw new Exception('[ERROR]' . $r['errorMessage']);
		}
		$data = array_pop($r['results']);
		return $data['longUrl'];
	}
}
<?php
require_once('BitlyUtil.php');
class JmpUtil extends BitlyUtil {
	const SHORTEN_API = 'http://api.j.mp/shorten?version=2.0.1&longUrl=%s&login=%s&apiKey=%s&format=json';
	const EXPAND_API = 'http://api.j.mp/expand?version=2.0.1&shortUrl=%s&login=%s&apiKey=%s&format=json';
}

PHP5.3以上でないと動きません。PHP5.3未満で動かす場合はstatic::をself::に変えてみてください*1。何かしら妥協して対象バージョンを限定しない書き方もあるかとは思いますが、PHPカンファレンスに触発されて5.3の機能を使ってみたくなったのでした。

マイGitHub

no title

まだどんなことができるかよく分かっていませんが、今後何かつくった際は積極的に公開していければと思います。


【関連記事】
PHP bit.ly/j.mpのAPIで短縮URLを作成/展開するユーティリティクラス - 130単位

*1:その場合JmpUtil使ってもbit.lyURLが返ってきますが

2010-09-22

Twitter Tools2.4のカスタマイズ フィルターフック版

Twitter Tools2.0のカスタマイズ - 130単位

ほぼメンテしてなかったTwitterまとめブログが、9月からOAuth認証のみ対応になった影響で更新が止まっていました。

WordPressTwitter Tools « WordPress Plugins 
http://wordpress.org/extend/plugins/twitter-tools/

Twitter Tools 2.4 (OAuth Support) | alexking.org 
http://alexking.org/blog/2010/08/15/twitter-tools-2-4

というわけでまとめ投稿用のプラグインTwitter Toolsを2.0から2.4にアップデート。前回カスタマイズ部分は上書きしてしまいましたが、今後を考慮してフィルターフックを利用してみることにしました。

時刻表示するカスタマイズ (フック利用)

<?php
function aktt_tweet_display_ex($output, $tweet) {
	$time = '<span class="aktt_tweet_time">['.date('H:i',strtotime($tweet->tw_created_at) + 9*3600). ']</span> ';
	return $time . $output;
}
add_filter('aktt_tweet_display', 'aktt_tweet_display_ex', 10, 2);
  • 1ツイートの表示用文字列を生成するaktt_tweet_display()の中にあるフック
  • aktt_tweet_displayに優先度10、引数2個でフィルター関数を追加
  • 前回記事同様に時刻を付加して文字列を返す
  • テーマのfunctions.phpに記述すればok
    • テーマを頻繁に変更する場合は独自プラグインに記述するのが良さ気

備考

Twitter Tools 2.4の設定が途中で止まってしまいます。 | WordPress.org

上記フォーラムや公式プラグインディレクトリの評価でも見てとれるように、サーバーによってはうまく動かない場合があるようです。自分が利用しているland.toでは問題なく動いているっぽいです。

2010-09-20

8月分の読書記録

『拝金』おもしろかったです。日常生活の会話からビジネスが生まれる前半も怒涛のスピード感で展開される後半もそれぞれ読み応えあります。

『iPhoneとツイッターで会社は儲かる』で取り上げられている先進的な事例とその効果は、なかなか興味深いものでした。

8月分読書データ

期間 : 2010年08月
読了数 : 10 冊
老後に本当はいくら必要か (祥伝社新書192)
津田 倫男 / 祥伝社 (2010-01-30)
★★☆☆☆ 読了日:2010年8月29日
証券会社の実態や損をしない大金持ちなど、ひとつの知識として得るには悪くない本
iPhoneとツイッターで会社は儲かる(マイコミ新書)
山本 敏行 / 毎日コミュニケーションズ (2010-02-23)
★★★★☆ 読了日:2010年8月27日
PS3テレビ会議グーグル・ビデオの動画共有は優れたアイデアと思った。ラストの社員アンケート公開も様々な意見が知れて良い
大東京トイボックス(6)(バーズコミックス)
うめ / 幻冬舎コミックス (2010-08-24)
★★★★☆ 読了日:2010年8月25日
「あきらめなけりゃなんとかはなるもんだって」 素直に思いをぶつけてわかり合っていく展開が読んでて心地よい
少女ファイト (7) 特装版
日本橋 ヨヲコ / 講談社 (2010-07)
★★★☆☆ 読了日:2010年8月12日
人間関係が濃すぎる感もあるものの、それを補ってあまりあるキャラの個性と魅力
ONE PIECE (59)
尾田 栄一郎 / 集英社 (2010-08-04)
★★★☆☆ 読了日:2010年8月12日
予想外だが途中の盛り上がりには相応しい終結とも思う。新たな伏線が気になる
バクマン。 (09) (ジャンプコミックス)
小畑 健 / 集英社 (2010-08-04)
★★★★☆ 読了日:2010年8月8日
2本同時連載とか連載終了意向とかマンガでしかできなさそうな展開が面白い
拝金
堀江 貴文 / 徳間書店 (2010-06-17)
★★★★☆ 読了日:2010年8月7日
「欲望が金の価値を決める」「答えは見つけるもんじゃない、答えに導くんだ」新しい手法を取り入れた出版/宣伝も印象的
NARUTO-ナルト-(52)(ジャンプコミックス)
岸本 斉史 / 集英社 (2010-08-04)
★★★★☆ 読了日:2010年8月5日
カブト鬼鮫がもたらす展開が気になる
1日15分、10日で学ぶ! 理系のための投資入門
橋本 顕愛 / ダイヤモンド社 (2010-07-30)
★★★☆☆ 読了日:2010年8月1日
「お金よりも時間を大切にする」「いいと思ったことはすぐに実行する」「アドバイスは自分と利害関係が一致して、その分野で結果を出している人から受ける」
ペーパーレス化実現!ビジネス必携の「手帳」サービス エバーノート Evernote 完全活用術 Windows & iPhone両対応!
★★★☆☆ 読了日:2010年8月1日
各種iPhoneアプリの解説がわかりやすい

メディアマーカー

7月分の読書記録 - 130単位 (一ヶ月前)

8月分の読書記録 - 130単位 (一年前)

2010-09-17

Ktai Library 0.3.2 AUでアクセスキー絵文字出力と絵文字自動変換の両立

ktailibrary.org 
http://www.ktailibrary.org/

MASA-P's ktai-dev at master - GitHub 
http://github.com/MASA-P/ktai-dev

やりたいこと

で、はまりました。本体をいじっていいものか悩みつつ。

AU accesskey用絵文字出力と絵文字自動変換がうまくいく組み合わせ

AppController

<?php
var $ktai = array(
    'input_encoding' => KTAI_ENCODING_UTF8,//UTF-8
    'output_encoding' => KTAI_ENCODING_UTF8,//UTF-8
    'output_auto_convert_emoji' => true,
    'output_auto_encoding' => true,
    'use_binary_emoji' => true,
);
  • ソース文字コードUTF-8&絵文字自動変換が前提だとこれしかうまくいかない(と思う)
  • DoCoMoのときは出力SJISにしたうえでuse_binary_emojiをfalseにしないといけない

ただ、AUは出力SJISにしたいので、本体をいじって対応してみました。

AU 出力文字コードSJIS対応

AppController

<?php
var $ktai = array(
    'input_encoding' => KTAI_ENCODING_UTF8,//UTF-8
    'output_encoding' => KTAI_ENCODING_SJISWIN,//SJIS-win
    'output_auto_convert_emoji' => true,
    'output_auto_encoding' => true,
    'use_binary_emoji' => false,
);

KtaiHelper.php (helpers/ktai.php)

<?php
function link($title, $url = null, $htmlAttributes = array(), $confirmMessage = false, $escapeTitle = true){
    //略
    
    //$str = $this->emoji($accesskey + $default_code, false, null, null, null, $binary);
    $carrer = ($this->options['output_auto_encoding']) ? KTAI_CARRIER_DOCOMO : null;
    $str = $this->emoji($accesskey + $default_code, false, $carrer, null, null, $binary);
    
    //略
}
);
  • 絵文字自動変換が有効な場合、KtaiHelperのlink()で強制的にDoCoMoの絵文字にする
    • そのあとでAU用絵文字になる
  • 全体でuse_binary_emojiをfalseにしておくとDoCoMoのみfalseにする必要ない
    • とはいえ出力SJISにする必要はあるけど
  • 以下チケットが解決のヒントになった

これでやりたいことが実現できました。やり方間違っていましたらご指摘ください><


おまけ Ktai Library デフォルトオプション

KtaiComponent (components/ktai.php)

<?php
var $_options = array(
    'enable_ktai_session' => true,
    'use_redirect_session_id' => false,
    'imode_session_name' => 'csid',
    'session_save' => 'php',

    'output_auto_encoding' => false,
    'output_auto_convert_emoji' => false,
    'output_convert_kana' => false,

    'img_emoji_url' => "/img/emoticons/",
);

Lib3gk (vendors/ecw/lib3gk.php)

<?php
var $_params = array(

    //Encoding params
    //
    'input_encoding'  => KTAI_ENCODING_SJISWIN, 
    'output_encoding' => KTAI_ENCODING_SJISWIN, 
    'use_binary_emoji' => true, 

    //Emoji image params
    //
    'use_img_emoji' => false, 
    'img_emoji_url' => './img/emoticons/', 
    'img_emoji_ext' => 'gif', 
    'img_emoji_size' => array(16, 16), 

    //iPhone params
    //
    'iphone_user_agent_belongs_to_ktai'      => false, 
    'iphone_user_agent_belongs_to_softbank'  => false, 
    'iphone_email_belongs_to_ktai_email'     => false, 
    'iphone_email_belongs_to_softbank_email' => false, 

    //Session params
    //
    'enable_ktai_session' => true, 
    'use_redirect_session_id' => false, 

);

2010-09-13

mixi meetup 2010 エンジニア系セッションのメモ #mm2010

mixi meetup 2010 ≪ 株式会社ミクシィ 
http://mixi.co.jp/mixi-meetup

メインの内容は他で公になっているので、それ以外のセッションのメモを2つ載せてみます。粗いメモなため間違っている部分もあると思いますので軽く読み流す感じでお願いいたします。

Opening Session 【B-2】 エンジニアトーク「日本のプラットフォームの現状と今後」

北村さん、山下さん、山口さん、安生さん、山家さん

SNSAPIの独自仕様
  • 日本はすべてのプラットフォームがOpenSocialで統一されている
  • OpenSocialで統一しているのに各PFの独自拡張で規格が違ってきている
    • ただプラスアルファな部分なので移植はできる
    • 自社アバター前提のゲームだとモバゲーは相性わるい
今後の展開
SAP支援の取り組み
プラットフォームの好きな部分
  • 各社でのAPIの統一
  • 外部からのAPI呼び出し
    • APIを出すからにはWin-Win
    • 出す方向にいけたらいい(午後の発表に期待)

Mini Session 「Ask the engineers」

田中さん、石川さん、山下さん

  • ドキュメントはテスト用サンプルコードを含めしっかりつくっていきたい
  • OpenSocialの新しい仕様
    • PCだとFlashメインでAPIの新しさはさほど関係ないのでは
    • とはいえ0.8.1からは上げたいと思っている
  • プロフィール情報の公開をブロックしたいとき
    • プロフィール情報はAPIに渡さない設定もできる
    • アプリごとに設定できる
  • 優秀なエンジニアの定義
    • ソーシャルへの理解
    • 議論ができる人、考えを取り込もうとする姿勢
    • 最低限の技術力
    • ネット上の知り合いだけで十分という考えは(mixiとは)ずれてる
    • 引き出しの多さ、解決方法の多さ
  • 現時点では生年月日はAPIではとれない
    • 登録内容の整備が済み次第API公開
  • mixiチェックボタンにカウント数をつける予定は今のところない
    • 外部からのポストはmixiの中でバイラルをかける
  • mixiチェックなどはmixiユーザーがベースの機能
    • 既存会員のあるサービスで扱うには会員の紐付けが必要
    • 1サービス1アカウントでの運用は推奨していない
    • OAuthからOpenID取得を検討されるとよいかも
  • Open Graph Protocol採用の経緯
    • 標準的な仕様を取り入れたい
    • Open Graph Protocolが標準なのか?
    • Facebookが代表的な事例
    • オープンなものだと信じでコミュニティと協調してやっている
    • Open Web Foundation
  • ペイメントAPIの開放
    • 仮想通貨は政治的な話が絡む
  • APIメンテナンスについて
    • 現状はチェックボタンは見えなくなる
    • 投稿時にメンテの通知がでる
  • アプリのサンドボックス環境は整備したい
  • PC版アプリの945ピクセル廃止は今年度中くらいが目処
  • チェックボタン設置の基準は常識の範囲内で
    • アダルト系コンテンツはチェックするユーザー自身にリスク
  • mixiとしてはプラットフォーム化を積極的にやっていく
  • 標準仕様が足かせとなるような課題への対処

感想

強く印象に残った出来事がありました。Mini Sessionの終了時、ある有名なエンジニアの方が、真っ先にmixiエンジニアの方と名刺交換をしにいったのです。旺盛な知識欲や技術に対する向上心からの、ごく自然な行動なのだと思います*1。これこそまさにエンジニアとして大事であろうという部分を目の当たりにし、軽く衝撃を受けたのでした。

Opening Sessionでもそうですが、業界を牽引するエンジニアの方々は、仕様の標準化APIの公開などに意欲的なのがみてとれます。非常に好感が持てますし、自分もいずれそうなっていたいと思いました。

刺激の多い素晴らしいベントでした。参加できてよかったです。

関連リンク

日本のプラットフォームの現状と今後=mixi meetup議事録【ループス岡村直人】 : TechWave 
http://techwave.jp/archives/51500579.html

mixi meetup 2010 Social Leaders Conference に参加して | ソーシャルアプリ.jp 
http://www.socialapplication.jp/2010/09/mixi/900/

*1セッション中も列に並んで質問していました

2010-09-12

音源情報配信TwitterBotをさらにアップデート&2作目

ネタは同じですが2作目のBotつくりました。

ystk_rmx(@ystk_rmx)さん | Twitter

f:id:deeeki:20100913044356j:image

no title (WordPress)

やったこと

音源情報取得
  • Dailymotionに対応
    • RSSから取得
  • SoundCloudに対応
  • Veohに対応しようとしたけどやめた
    • Developer登録が問い合わせ形式で面倒そうな上に、Countryの項目でJapanがなかったため
Twitter
  • 1日の終わりにまとめとして投稿数を表示してブログへリンク
  • 自動フォロー返し
  • SouncCloudのURLが長いのでBit.lyのAPIを利用
  • 過去のコンテンツは「新着」と表示しないようにした
WordPress
  • マルチサイトの1つとして立ち上げ
    • 既存ブログの設定をなぞればいいので比較的楽
  • 新規テーマ導入
  • 関連記事表示試験導入
    • 片方はYet Another Related Posts Plugin
    • 片方はSimple Tags
  • Broken Link Checker導入
    • 発見されたリンク切れはその場で修正可能で記事も置換される
    • ブログごとに4つテーブルが増える
  • Robots Meta導入

ロジックはできる限り抽象化しており、アカウント情報と検索用/判定用キーワードを変更するだけで動くようになっています。ただ機能追加の連続でコードの見通しが悪くなってきたためリファクタリングはしたいところです。

あとBotはいちおうブランディングのため時間かけて画像探してみたりしたんですが、どうもイマイチな感じです*1。いいアイデアとか画像お持ちの方いましたらコメントくださいませー。

以下は1作目です。

prfm_rmx(@prfm_rmx)さん | Twitter
no title (WordPress)


【関連記事】
音源情報配信TwitterBotをまたアップデート - 130単位
音源情報配信TwitterBotをアップデート - 130単位

*1:もろ本人画像ですし…><

2010-09-10

PHP bit.ly/j.mpのAPIで短縮URLを作成/展開するユーティリティクラス

bit.ly | Basic | a simple URL shortener 
http://bit.ly/
Shorten & Share | bit.ly | a simple URL shortener 
http://j.mp/

APIを扱うにはアカウント登録が必要です。登録したらサインインしてhttp://j.mp/a/accountよりAPI Keyを取得します。

Class

<?php
class BitlyUtil {
    const BITLY_USER = 'your-user-name';
    const BITLY_API_KEY = 'your-api-key';
    const SHORTEN_API = 'http://api.j.mp/shorten?version=2.0.1&longUrl=%s&login=%s&apiKey=%s&format=json';
    const EXPAND_API = 'http://api.j.mp/expand?version=2.0.1&shortUrl=%s&login=%s&apiKey=%s&format=json';

    public static function shorten($url) {
        $str = file_get_contents(sprintf(self::SHORTEN_API, $url, self::BITLY_USER, self::BITLY_API_KEY));
        $r = json_decode($str, true);
        if ($r['errorCode'] > 0) {
            throw new Exception('[ERROR]' . $r['errorMessage']);
        }
        $data = array_pop($r['results']);
        return $data['shortUrl'];
    }

    public static function expand($url) {
        $str = file_get_contents(sprintf(self::EXPAND_API, $url, self::BITLY_USER, self::BITLY_API_KEY));
        $r = json_decode($str, true);
        if ($r['errorCode'] > 0) {
            throw new Exception('[ERROR]' . $r['errorMessage']);
        }
        $data = array_pop($r['results']);
        return $data['longUrl'];
    }
}

json_decode()を使うのでPHP5.2以上かPECLJSON拡張が必要です。

bit.ly(j.mp)のユーザー名とAPI Keyをクラス定数に設定します。

BitlyUtilなのにj.mp使ってるのはまあ気にしないでください*1

Usage(test)

<?php
require_once('BitlyUtil.php');
$url = 'http://d.hatena.ne.jp/deeeki/';
$short = BitlyUtil::shorten($url);
$long = BitlyUtil::expand($short);
echo ($url == $long) ? 'OK' : 'NG';

JSONXMLフォーマットの違い

JSON

f:id:deeeki:20100910090755j:image

XML

f:id:deeeki:20100910090754j:image

短縮時のレスポンスの中身が若干違います。Parserの解釈の問題かもしれませんが、JSONのほうが対称性があって正しい気がするのでJSONを使うことにしました。

参考リンク

URL 短縮サービス bit.ly/j.mp の API 触ってみたメモ - 駄文置場 
http://d.hatena.ne.jp/d11/20090917/1253176846

*1:サービス提供元としてbit.lyを重んじてみたのですがURLとしてはj.mpのほうが短くていいです

2010-09-09

DailymotionのURL構造

Dailymotion - Online Videos, Music, and Movies. Watch a Video Today! 
http://www.dailymotion.com/

URL構造

タグ
  • http://www.dailymotion.com/tag/Perfume
キーワード(投稿日時が新しい順)
  • http://www.dailymotion.com/search/Perfume
チャンネル(カテゴリー)
  • http://www.dailymotion.com/channel/music
オプション
  • 注目の動画
    • http://www.dailymotion.com/featured/channel/music
  • HD画像コンテンツ
    • http://www.dailymotion.com/hd/channel/music
  • オフィシャルコンテンツ
    • http://www.dailymotion.com/official/channel/music
  • クリエイティブコンテンツ
    • http://www.dailymotion.com/creative/channel/music
表示順
  • 関連のある順(キーワードのみ)
    • http://www.dailymotion.com/relevance/search/Perfume
  • コメントが多い順
    • http://www.dailymotion.com/commented/search/Perfume
  • 再生数が多い順
    • http://www.dailymotion.com/visited/search/Perfume
  • 評価の高い順
    • http://www.dailymotion.com/rated/search/Perfume
期間
    • http://www.dailymotion.com/relevance-month/search/Perfume
    • http://www.dailymotion.com/relevance-week/search/Perfume
  • 今日
    • http://www.dailymotion.com/relevance-today/search/Perfume
言語
  • 日本語
    • http://www.dailymotion.com/lang/ja/search/Perfume
ページング
  • http://www.dailymotion.com/search/Perfume/1

わかったこと

  • 各見出しの項目で独立
  • 項目で組み合わせることができる
    • http://www.dailymotion.com/visited/tag/Perfume/search/mix/channel/music
  • RSSはそれぞれパスの先頭にrssを付ける
    • http://www.dailymotion.com/rss/search/Perfume
    • http://www.dailymotion.com/rss/visited/tag/Perfume/search/mix/channel/music
  • 動画ページはURLの最初のID的な文字列だけでもアクセス可能
    • http://www.dailymotion.com/video/xem098
    • http://www.dailymotion.com/video/xem098_perfumeyvoiceyyyyyyyyyy_music

2010-09-06

WordPress 3.0 Google XML Sitemapsプラグイン マルチサイト対応

WordPressGoogle XML Sitemaps « WordPress Plugins 
http://wordpress.org/extend/plugins/google-sitemap-generator/

検索エンジン用のサイトマップを自動生成するプラグインですが、マルチサイトのWordPressはサポートされていません(バージョン3.2.4)。

no title

そこでこちらを参考に、マルチサイト(サブディレクトリ)に対応させてみます(リンク先はサブドメインの場合の解説です)。

ソースコードの編集

google-sitemap-generator/sitemap.php 52〜58行目

<?php
//Check for 3.0 multisite, NOT supported yet!
// if((defined('WP_ALLOW_MULTISITE') && WP_ALLOW_MULTISITE) || (function_exists('is_multisite') && is_multisite())) {
//      if(function_exists('is_super_admin') && is_super_admin()) {
//              add_action('admin_notices',  array('GoogleSitemapGeneratorLoader', 'AddMultisiteWarning'));
//      }
//
//      return;
// }

.htaccess編集

# sitemap
RewriteRule ^([_0-9a-zA-Z-]+)/sitemap.xml sitemap-$1.xml [L]
RewriteRule ^([_0-9a-zA-Z-]+)/sitemap.xml.gz sitemap-$1.xml.gz [L]
  • sitemap.xmlがリクエストされたらsitemap-{サブディレクトリ名}.xmlに書き換え
  • RewriteBaseのすぐ下あたりに記述

プラグイン設定変更

  • 設定 > XML-Sitemap > サイトマップファイルの場所
    • 手動配置を選択
    • ファイル名を含むサイトマップファイルへの相対もしくは絶対パス(※以下は相対パス指定)
      • sitemap-prfm_rmx.xml
    • ファイル名を含む Sitemap ファイルへの完全な URL
      • http://m.deeeki.com/prfm_rmx/sitemap.xml
  • 設定の更新

robots.txt編集

User-agent: *
Disallow:

Sitemap: http://m.deeeki.com/prfm_rmx/sitemap.xml.gz

http://m.deeeki.com/prfm_rmx/sitemap.xmlからアクセスして、sitemap-prfm_rmx.xmlの内容が表示されれば動作確認完了です。


【関連記事】
WordPress 3.0 カスタム投稿タイプの記事一覧表示 - 130単位

2010-09-04

音源情報配信TwitterBotをまたアップデート

一週間前と同様にひきこもって開発してました。

やったこと

わかったこと

  • WordPressマルチサイト
    • マルチサイトの場合はWordPressを別ディレクトリにすることはできない
    • 新規サイト作成時にアンダースコアを含めることができない
      • 作成後のサイト情報の編集からであれば可能
    • サイト管理者でないと<object>タグなどが除去される
    • サイトの判別に$_SERVER環境変数が使われるため外から扱うには工夫が必要
  • WordPress XML-RPC投稿
    • WordPressコアを直接読み込んでの投稿よりも汎用的
    • mt_keywordsでタグ、wp_slugでスラッグ、custom_fieldsでカスタムフィールド指定
    • XML_RPC_Client#setDebug()でデバッグ可能
  • j.mp
    • 一度カスタマイズした文字列は他のURLには使えない

prfm_rmx(@prfm_rmx)さん | Twitter
no title (WordPress)

WordPressURLが変わりました。以前のURLからはリダイレクトしてます。


【関連記事】
音源情報配信TwitterBotをアップデート - 130単位
PHPでYouTube APIの利用とXMLからのデータ抽出 - 130単位