タグ: php
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の設定ってだいたいライブラリの中にあるし、魔法の呪文みたいになってて意味をいちいち見ないけど、
たまに見ると面白いなというそんな話。
MLBのデータを引っ張るためのPHPライブラリを書いてみたけど、
MLBのデータを引っ張ってくるためのRubyライブラリ「Gameday_API」に影響されて、 とりあえずバッターの成績を引っ張ってくるようなPHPライブラリを書いてみた。 なんかこんな感じで使えるようになってます。
【メモ】 Symfony1.0でGMailのSMTPを使ったメールが送信できない件のまとめ
現在進行形で嵌っているのですが、原因はともかく朧気ながら状況が把握できてきたので自分的まとめ。
Amazonアフリエイト用テスト
目的
Amazonの商品ページを開いて、そこからなるべく少ないステップでブログエントリに貼り付けるアフリエイト用パーツを取得できるようにする。やったこと
- ASINなどを与えるとその商品の情報を取得し整形して表示するプログラムを作成
- Amazonの商品ページでアフリエイト用パーツを取得するBookmarkletを作成
1. ASINなどを与えるとその商品の情報を取得し整形して表示するプログラム
大体次のような感じ。- PHPベース
- フレームワークはSymfony
- PEAR::Services_Amazonを使用
- //amazon.nplll.com/asin/[Amazon ASIN] → 特定の商品の情報を表示する
2. Amazonの商品ページでアフリエイト用パーツを取得するBookmarklet
AmazonのページからASINを抜き出して整形するBookmarkletjavascript: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文字化けさせないためのポイント
- 読み込む文書をUTF-8に変換しておく
- あらかじめ日本語文字列を数値文字参照に変換しておく
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件ずつINSERTする
- トランザクションを使用する
- 1クエリでまとめてINSERTする
- MySQL 5.1
- テーブルはInnoDB、AUTO_INCREMENT付き(innodb_autoinc_lock_mode=1)
- PHP 5.3.6
ionCubeとXdebugの読み込み順ではまる(VPSその8)
開発の終了が発表されても依然として使用しているフレッシュリーダー。 いずれGoogleリーダーにでも引っ越そうかなと考えてはいるのですけど、 設定の引き継ぎが面倒なのでなんとなく躊躇。 VPSへの引っ越しもタイミングだったかなとは思ったんですが、まぁ面倒だったので今回も結局継続使用します。 フレッシュリーダー自体は丸ごとrsyncでコピーすればOK。 データもライブラリもそれで問題ない。 (環境がLinux→Windowsとか、PHP4→PHP5とかでない限り) 以下、ハマリどころを中心にそれ以降の設定について。