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の設定ってだいたいライブラリの中にあるし、魔法の呪文みたいになってて意味をいちいち見ないけど、 たまに見ると面白いなというそんな話。

続きを読む

【メモ】 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について解っていないので、だいぶ泥縄であれこれやってるんですけどね… サーバの全面引っ越し(およびドメインの変更)はいつになることやら。

続きを読む

さくらのVPSにAPCを入れる(VPSその6)

それほど負荷を掛けているわけではないのでまだパフォーマンスを気にするレベルにはありませんが、 出来ることはやっておこうかと言うことでPHPアクセラレータをインストール。 eAcceleratorを試そうかなーと一瞬考えもしたけど、まぁインストール簡単なのを、ということでAPCを選択。 PHP: APC – Manual

続きを読む

SymfonyのセッションデータをMySQLに格納する

さくらインターネットから、「ファイル数多すぎるんで削除してください」という連絡が来たのでなんのこっちゃと調べたら、 この間の設定変更で指定したセッションファイル格納用ディレクトリが溢れているという話らしい。おおっと。 でもって、話をよくよく聞いてみるとセッションが使用不可になったのも共用ディレクトリである「/tmp」に保存できるファイル数が10万ファイルまでに制限されているからだそうな。当たり前か。 本当のことを言うと、そう大したユーザー数がいるとも思えないサービスなのに溢れすぎじゃないかと思うけど、 設定を見返すのは後回しにしてとりあえず現状を改善しないと行けない。 よくよく考えてみて、「/tmp」ディレクトリのパーミッション的に階層化も出来そうにないし、 こりゃセッションデータをMySQLに格納するしかないかなと言うことで以下の設定を。

参考:

symfonyでセッションにデータベースを使用する [dozo dokuwiki.php] Practical symfony | 22日目: デプロイ | symfony | Web PHP Framework

続きを読む

[PHP] さくらインターネットでセッションが使用できなくなっていた件

こちらの件に関連して。 [umbls] ログインできない不具合を修正しました。 – nplll 根本的な理由はさっぱり分からないのですが、なぜかさくらインターネットのサーバにてセッションが使用できなくなっていました。初めはプログラムのバグでログインできないんだと思って、自分が書いたコードやSymfonyの設定周りを洗っていたのですが、なんか何をどうやっても上手くいかない。それどころか、簡単なセッション処理のプログラムすら動かない。session_start()して、$_SESSIONを使って格納しただけなのに、保存されないのね。

コード例:

session_test.php:

session_test2.php:

<?php
session_start();

echo 'Welcome to page #2';

echo date('Y m d H:i:s', $_SESSION['time']);  // 1970 01 01 09:00:00と表示されてしまう
?>
散々嵌ったのだけど、もしかして、と思って次のことを試してみたら直りました。

解決策:

  • php.iniにてsession.save_pathを明示的に指定(例:/home/user/tmp) ← 以前はno valueだった
  • 指定したディレクトリに書き込み権限を与える
こんなのこっちで変更するわけがないので、サーバの設定が変わったのかな(一時ディレクトリのパーミションが変わったとか)と思うけど、その辺はよくわかんないし、いやまさかそんなことしないだろうと思うので、やっぱり僕が何か設定を変更してしまったのかなぁ。レンタルサーバだけにその辺の線引きが微妙で、しかも記憶に無いどころか痕跡すら見当たらなくて凄く気持ち悪いのだけど。 あー気持ち悪い。

続きを読む