Google AnalyticsのAPIをPHPから叩く

Blogのアクセスレポートで利用してただけど、先日Fenrirのデベロッパーズブログで見かけたのでちょっと書いてみる。

関連

Google Analytics API を利用した人気エントリー PHP スクリプト (フェンリル | デベロッパーズブログ) 【Web】Google Analytics API の簡単に出来るお試し方法 (フェンリル | デベロッパーズブログ) 上記エントリ内では、「GAPI」というクラスを利用していますが、 個人的には「Google Analytics API Class」の方が好きです。 (野良ライブラリなのは同じですが) Google Analytics API class for PHP | Ask About PHP 以下、それを使ったサンプルコード。

続きを読む

【メモ】 PDOで空文字をNULLに変換する

#需要がどれだけあるかわかりませんが PDOを使ってデータを取得する際に、空文字をNULLに変換して取得することが出来ます。 PHP: PDO::setAttribute – Manual

PDO::ATTR_ORACLE_NULLS

NULL と空文字列の変換 「ORACLE」とありますが、Oracle だけでなく、全てのドライバで利用可能です。

PDO::NULL_NATURAL

変換しない

PDO::NULL_EMPTY_STRING

空文字は NULL に変換される

PDO::NULL_TO_STRING

NULL は空文字に変換される

使用例

$connection = new PDO( 'mysql:dbname=dbname;host=your_host', 'user', 'pass' );
$connection->setAttribute( PDO::ATTR_ORACLE_NULLS, PDO::NULL_EMPTY_STRING );
PDOの設定ってだいたいライブラリの中にあるし、魔法の呪文みたいになってて意味をいちいち見ないけど、 たまに見ると面白いなというそんな話。

続きを読む

Amazonアフリエイト用テスト

目的

Amazonの商品ページを開いて、そこからなるべく少ないステップでブログエントリに貼り付けるアフリエイト用パーツを取得できるようにする。

やったこと

  1. ASINなどを与えるとその商品の情報を取得し整形して表示するプログラムを作成
  2. Amazonの商品ページでアフリエイト用パーツを取得するBookmarkletを作成

1. ASINなどを与えるとその商品の情報を取得し整形して表示するプログラム

大体次のような感じ。
  • PHPベース
  • フレームワークはSymfony
  • PEAR::Services_Amazonを使用
【メモ】 PEAR::Services_Amazonを使って商品情報を取得(署名認証対応) – nplll サービスURLはこんな感じ。
  • //amazon.nplll.com/asin/[Amazon ASIN] → 特定の商品の情報を表示する
あ、一応オープンになってますが、あくまで自分向けなので突然サービス終了することもありますし、 アフリエイトIDを追加することも出来ません。

2. Amazonの商品ページでアフリエイト用パーツを取得するBookmarklet

AmazonのページからASINを抜き出して整形するBookmarklet
javascript:function%20getID(id){return%20document.getElementById(id);};var%20u=location.href,d=/(http:\/\/www\.amazon\.(com|co\.jp))/;if(u.match(d)){t=getID("btAsinTitle").innerHTML;r2=RegExp.$2;if(r2=="co.jp")l="amazon.jp/dp/";else%20if(r2=="com")l="amzn.com/";else%20exit();l='';prompt("%E3%80%8C"+t+"%E3%80%8D",l);void(0);}
例えばこのページで実行すると↓ Amazon.co.jp: THE BEST OF スチャダラパー1990~2010: スチャダラパー: 音楽 こんなのが取れます。↓
実際の表示はこんな感じ↓

続きを読む

【メモ】 PEAR::Services_Amazonを使って商品情報を取得(署名認証対応)

いつまでもAmazonのアフリエイト作成ツールに頼ってリンクを作成するのも何だかなぁと思ったので、APIを叩いて結果を取得してみた。色々とやり方はあるだろうけれども、PHPでやる場合にはPEARライブラリの「Services_Amazon」を利用すると簡単。

0. 準備

APIを利用するには、「アクセスキーID」と「アクセスシークレットキー」の2つが必要です。 この辺を参考にアカウントを作成して取得。 Access Key IDの取得 – サービス利用の準備 – Amazon Web サービス デザインが変わってるけど大体解ると思います。 ちなみにこれはAmazonオンラインショップのユーザーアカウントや、アフリエイトのアカウントとは違うので、それらとは別に取得しなくてはなりません。また既にAmazonでアフリエイトをやってる人は、メールアドレスを揃えないといけないらしいです。

続きを読む

【メモ】 DOMDocument::loadHTMLで文字化けする場合

HTML文書を読み込んでパースするときに、今までは正規表現でやっていたんですが、 処理がどうしても面倒な感じになるし改変にも弱いので、DOMでやることにしてみたらば見事に嵌るなど。 読み込む文書がXMLだと問題ないんですが、HTML、特にShift-JISで書かれた文書だとなぜか文字化け。 色々と検索した結果、多分これで行けると言うのにたどり着いたのでメモ。

参考

DOM拡張モジュールでHTMLをパースする【PHP】 – Programming Magic

文字化けさせないためのポイント

  1. 読み込む文書をUTF-8に変換しておく
  2. あらかじめ日本語文字列を数値文字参照に変換しておく

1. 読み込む文書をUTF-8に変換しておく

PHPのデフォルト文字コードに合わせる、と言う意味です。

2. あらかじめ日本語文字列を数値文字参照に変換しておく

よく解らなかったんですがこれが文字化けの直接できな原因のようです。 参考エントリでは「metaタグで文字エンコードが指定されていない」場合に起きると書かれていますが、 文字エンコードに「Shift_JIS」が指定されていても発生しました。 というわけで、あらかじめ日本語文字列を数値文字参照に変換しておきます。
$html = mb_convert_encoding($html, 'HTML-ENTITIES', 'ASCII, JIS, UTF-8, EUC-JP, SJIS');
これだと、表示上文字化けは起きません。 それどころか、コメント以外の部分は普通に日本語で書き出されているようです。 ので、このままでもいいかなーという感じ。 まぁとはいえ、あんまりDOMについて解っていないので、だいぶ泥縄であれこれやってるんですけどね… サーバの全面引っ越し(およびドメインの変更)はいつになることやら。

続きを読む

MySQLのINSERT文(方法ごとの処理時間比較)

大量のデータをINSERTする場面があってなんとか高速化できないかと思って、 以下の手法を比較してみた。

  1. 1件ずつINSERTする
  2. トランザクションを使用する
  3. 1クエリでまとめてINSERTする
テスト環境は以下の通り。
  • MySQL 5.1
  • テーブルはInnoDB、AUTO_INCREMENT付き(innodb_autoinc_lock_mode=1)
  • PHP 5.3.6
1000件、3000件、5000件、10000件と件数を増やしながらそれぞれ5回ずつ試行して平均を取っている。 使用したコードは最後に。

続きを読む

ionCubeとXdebugの読み込み順ではまる(VPSその8)

開発の終了が発表されても依然として使用しているフレッシュリーダー。 いずれGoogleリーダーにでも引っ越そうかなと考えてはいるのですけど、 設定の引き継ぎが面倒なのでなんとなく躊躇。 VPSへの引っ越しもタイミングだったかなとは思ったんですが、まぁ面倒だったので今回も結局継続使用します。 フレッシュリーダー自体は丸ごとrsyncでコピーすればOK。 データもライブラリもそれで問題ない。 (環境がLinux→Windowsとか、PHP4→PHP5とかでない限り) 以下、ハマリどころを中心にそれ以降の設定について。

続きを読む