「FaceBook いいねボタン」、meta タグ、OGP
FaceBookの「いいねボタン」で少しハマったのでメモ。
Like Button
http://developers.facebook.com/docs/reference/plugins/like
設置のしかたについては略。
このボタンに設定したURLと、実際にFaceBook上に表示されるURLが違う、という問題が発生。
どうも、 hrefプロパティで指定したURLがそのまま使われるのではなく、
そのURLに対して一度、クローラーが情報を収集しに来るようです。
[**/Jan/2011:**:**:** +0900] "GET /siteurl HTTP/1.1" 200 44836 "-" "facebookexternalhit/1.1 (+http://www.facebook.com/externalhit_uatext.php)"
その後、クローラが サイトのtitle、meta、description、OGP、等の情報を収集し、FaceBook内のDBに登録した後に「いいね」ボタンが押された数を集計しているようです。
(そんなわけで、APIに登録してないページタイトル等が、FaceBookのタイムライン上に表示される)
今回、問題を起こしたのは link タグ。
ここの指定にミスがあったために、ボタンを設置したURLとFaceBook上に表示されるURLが変わってしまったようでした。
○link rel="canonical" についての詳細は
link rel="canonical"によるURL正規化タグ——SEOにとって非常に重要な進歩(前編)
http://web-tan.forum.impressrd.jp/e/2009/03/05/5112
○OGPについての詳細は
フェイスブック、ミクシィ、グリーで使われている OGP (Open Graph Protocol) とは何か
http://d.hatena.ne.jp/amachang/20110117/1295233078
ちなみに、link を修正してもFaceBook上のキャッシュデータが更新されるまで2日ほどかかりました。
作業ログ Google App Engineに登録するまで。
トップにアクセス
http://code.google.com/intl/ja/appengine/
ログインして、右上のスタートガイドから「App Engine アカウントを登録します。」をクリック。
何故か携帯電話のメアドを聞かれるので入力して「send」
すぐ、携帯のメアドに認証番号が送られてくるので入力。
なんかいろいろ登録して終了。
最初なんで、下手に変更しないでエンター。
スナップショットは後で張る。
てか、簡単だったな… ログの意味あんま無いや。
Cake、複数のレコードをまとめて保存する。
CakePHP 1.3
テーブルの複数のレコードをまとめて保存する方法メモ。
まず普通にテーブルのモデルを作って。
<?php class Mytable extends AppModel { var $useTable = 'mytable'; var $alias = "Mytable"; var $primaryKey = "id"; // その他、諸々の設定 }
別のモデルに hasMany で持たせる。
<?php class EntryMyTable extends AppModel { var $useTable = false; var $hasMany = array( 'Mytable' => array( 'className' => 'Mytable', 'foreignKey' => false, 'conditions' => ......, ) ); }
Viewはこんな。
<?php echo $form->create(false, array('action' => '/saveurl/') ); ?> <?php for ( $i = 0; $i < 10; $i++ ){ ?> <?php echo $form->input("Mytable.$i.id", array("type" => "hidden","value" => h($i) ));?> <?php echo $form->input("Mytable.$i.col1", array("type" => "text"); ?> <?php } ?> <?php echo $form->end(array("label" => "submit")); ?>
でコントローラから
<?php $this->EntryMyTable->saveAll($this->data);
と、saveAll() メソッドで保存できた。
わーい。
VMWare Toolsの罠にまんまと引っかかった件について。
メモします。
VMWare Tools「共有」設定。
メインのマシンと、仮想マシンでファイルを共有する機能なのです。
変にネットワークとかを計有しないし、設定も簡単だし便利。
だったんですが。
どうもこの共有設定でマウントされる /mnt/hgfs という領域。
# df -hT
Filesystem Type サイズ 使用 残り 使用% マウント位置
/dev/mapper/VolGroup00-LogVol00
ext3 18G 3.5G 13G 22% /
/dev/sda1 ext3 99M 25M 70M 26% /boot
tmpfs tmpfs 506M 0 506M 0% /dev/shm
.host:/ vmhgfs 466G 48G 418G 11% /mnt/hgfs
vmhgfsとかいう独自のファイルシステムを使っていて、
このファイルシステムは大文字と小文字を区別しない。
詳しく書くと大文字と小文字を区別しない、と言う事です。
VMだから、本番とほとんど同じ環境のハズ! と調子乗ってたら大変な事になりました。
まぁそんだけなんだけど。
Docomo、端末IDを常に取得する。
ページ内の全てのリンクに guid=ON のパラメータを設定する。
http://www.aiwake.co.jp/modules/bulletin/index.php?page=article&storyid=2
ここの方のコードを少しアレンジ...
url_rewriter.tags の値の form の要素だけ上書きするようにしています。
下書きなので、テストはまだ。
<?php // User Agent から判定 (省略) //if('is docomo'){ parse_str(str_replace(',','&',ini_get("url_rewriter.tags")), $tags); $tags['form'] = "action"; ini_set("url_rewriter.tags", http_build_query($tags,null,',')); output_add_rewrite_var('guid', 'ON'); //}
なぜこんな面倒なことをしたかというと url_rewriter.tags のデフォルトが
<?php echo ini_get("url_rewriter.tags"); # a=href,area=href,frame=src,input=src,form=fakeentry
と、
「form=fakeentry」
こいつの意味が謎。
しかも「form=fakeentry,form=action」のように、同じタグを二度書くと動かないっぽいから。
しかたなく、既存の設定を引き継いで、必要な部分上書き。としたわけです。はい。