<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:itunes="http://www.itunes.com/DTDs/Podcast-1.0.dtd" version="2.0">
  <channel>
    <title>Trend Antenna 開発日記</title>
    <link>http://blog.trend-antenna.com/</link>
    <language>ja</language>
    <docs>http://blogs.law.harvard.edu/tech/rss</docs>
    <itunes:subtitle></itunes:subtitle>
    <itunes:summary>Trend Antennaの開発日記です。環境構築、PHPプログラミングなどについて書きつづります</itunes:summary>
    <itunes:keywords>PHP,MySQL,Apache,さくらインターネット,Webプログラミング</itunes:keywords>
    
    <itunes:author>ERROR: NOT PERMITED METHOD: nickname </itunes:author>	
    <itunes:owner>    
       <itunes:name></itunes:name>
       <itunes:email></itunes:email>
    </itunes:owner>
        <itunes:explicit>no</itunes:explicit>
        <item>
      <title>Naver の Yeti を追い出す</title>
      <link>http://blog.trend-antenna.com/article/39539718.html</link>
      <description> この10日ほど、Trend Antenna にアクセスしにくい状況が続いています。データベースサーバに負荷がかかっているために、PHP の実行に制限がかかっているようです。 エラーが出始めてから、データベースの構造を改善したり、SQL文の書き方を工夫してみたりしました。しかし、好転の兆しが見えず、かえって状況は悪化…。 そんなときに、アクセス解析を眺めていたら、Naver のロボット、Yeti が大量にアクセスしてきていることが判明しました。普段、ロボットを除いたアクセス解析しか見ていなかったので気付かなかったのですが、改めて見てみると、全体の転送量の60％以上が Yeti によるアクセス。他の検索エンジンのロボットがせいぜい5~6％なのに比べると、大きな違いです（ちなみに、Googlebot によるアクセスは、訪問回数こそ多いものの、転送量は非常に小さく、同じ内容のデータを読まないような...</description>
      <pubDate>Fri, 09 Jul 2010 14:51:25 +0900</pubDate>
      <category>その他</category>
      <author>まいける</author>
          </item>
        <item>
      <title>PEAR Services_Amazon を使ってみる</title>
      <link>http://blog.trend-antenna.com/article/35610255.html</link>
      <description> 楽天ウェブサービスが安定しないこともあり（新規デベロッパーIDの発行を停止したようですね）、Amazon を併用するようにしたのですが、せっかくなので、新しいことを試してみようと、PEAR Services_Amazon を使ってみることにしました。書籍検索の場合は、以下のような感じです。require_once 'Services/Amazon.php';require_once 'Cache.php';$access_key_id = '(公開アクセスキー)';$secret_access_key = '(秘密アクセスキー)';$associate_tag = '（アソシエイトタグ）';    $amazon = new Services_Amazon($access_key_id, $secret_access_key, $associate_tag);...</description>
      <pubDate>Fri, 26 Feb 2010 01:46:44 +0900</pubDate>
      <category>PHP</category>
      <author>まいける</author>
          </item>
        <item>
      <title>モバイル版 Google Analytics を PHP4 で動かす</title>
      <link>http://blog.trend-antenna.com/article/33833075.html</link>
      <description> 先日からサービスの提供が始まったモバイル版の Google Analytics ですが、アクセス解析用の PHP スクリプトである ga.php は PHP4 では動きません。PHP4 のアップデートはすでに終わっているので、PHP5 にアップグレードするべきなのですが、レンタルサーバなどで PHP のアップグレードをしてくれないところもあると思います。そこで、PHP4 でも動くように、ga.php を修正してみました（ライセンス的な問題がちょっと気になりますが…）。 準備として、PEAR の PHP_Compat をインストールします（stable版の1.5.0ではなく、alpha版の1.6.0a2が必要）。 次に、ga.php の先頭部分にrequire_once 'PHP/Compat/Function/setrawcookie.php';require_once 'PHP/Compat/Function/file_get_contents.php';を追加します。そして、97行目と100行目にある file_get_contents を php_compat_file_get_contents に書き換えます。さらに、144行目以降を    setrawcookie(        COOKIE_NAME,        $visitorId,        $timeStamp + COOKIE_USER_PERSISTENCE,        COOKIE_PATH);から    setrawcookie(        COOKIE_NAME,        $visitorId,        $timeStamp + COOKIE_USER_PERSISTENCE,        COOKIE_PATH,        '',        false,        false);に変更します。 これで動くようになるはずです（PHP4.4.9 の環境で確認）。 種明かしをすると、setrawcookie は PHP5 から新たに登場した関数です。また、file_get_contents のコンテキストサポート（第3引数）も PHP5 以降にサポートされたものです。このため、これらを使えるようにしなければなりません。setrawcookie は、PHP4 にもともとない関数ですので、それほど問題ない（せいぜい 1.6.0a2 をインストールすることと、引数を省略せずに記載することくらい）のですが、file_get_contents ...</description>
      <pubDate>Tue, 24 Nov 2009 12:32:31 +0900</pubDate>
      <category>PHP</category>
      <author>まいける</author>
          </item>
        <item>
      <title>Amazon の書籍を楽天ブックスで買うためのブックマークレット（続き）</title>
      <link>http://blog.trend-antenna.com/article/33492984.html</link>
      <description> 前回のエントリーで書いたAmazon の書籍を楽天ブックスで買うためのブックマークレットですが、処理の流れとしては、javascript で表示中の Amazon の URL から ASIN を取得取得した ASIN を Amazon の API に渡して ISBN を取得取得した ISBN を楽天の楽天ブックス書籍API に渡して楽天ブックスの商品ページを取得ということをやっています。 書籍の場合はこれでうまくいくのですが、雑誌の場合はうまくいきません。雑誌には ISBN ではなく、JANコードが付けられており、ASIN→ISBN変換では値を返さないからです。 いろいろ調べてみると、Amazon API の ItemAttributes レスポンスグループの中にある EAN が日本の雑誌の場合には JANコードになっていることがわかりました。そこで、ASIN→ISBN変換で値を返さない場合は、EAN を取得し、これを楽天ブックス雑誌検索API に渡すことで、雑誌でも楽天ブックスの商品ページを取得できるようになりました。 これを応用すれば、CD や DVD でも Amazon→楽天の検索ができるかもしれません（未検証ですが）。</description>
      <pubDate>Sun, 08 Nov 2009 00:51:57 +0900</pubDate>
      <category>その他</category>
      <author>まいける</author>
          </item>
        <item>
      <title>Amazon の書籍を楽天ブックスで買うためのブックマークレット</title>
      <link>http://blog.trend-antenna.com/article/33445421.html</link>
      <description> 厳密にいうと、Trend Antenna の開発とは直接関係がないのですが、ちょっとしたツールを作りましたので、ご報告。 API の使い勝手の良さもあって、Webサービスで書籍を紹介する場合、大概のサービスは Amazon へのリンクを張っています。私がよく使うはてなもメディアマーカーも同様です。レビューの充実度をみても、確かに便利なのですが、実際に買う段になると、個人的にはポイントがたまっている楽天ブックスで買いたいのです。そこで、Amazon の商品紹介ページから楽天ブックスの商品紹介ページに橋渡しをするブックマークレットを作ってみました（下のリンクをブックマークに保存すれば利用できます）...</description>
      <pubDate>Thu, 05 Nov 2009 13:11:26 +0900</pubDate>
      <category>その他</category>
      <author>まいける</author>
          </item>
        <item>
      <title>関連キーワードを表示するようにしました</title>
      <link>http://blog.trend-antenna.com/article/32280405.html</link>
      <description> 「アイフル 倒産」で盛り上がった今週末。これまでにも「春日電機 倒産」がアクセスを集めたりしていましたが、こうなってくると次の倒産が気になります。そこで、これまでに「倒産」とともにどんな企業が検索されていたかがわかるようにしてみました（別に倒産だけに限った話ではありませんが）。 仕様としては、スペースで区切られていない一つのキーワードで検索されたときに、そのキーワードを含む検索キーワードを表示するようにしてみました（表示は過去の検索回数が多い順に最大10件まで）。 これまでもはてなや Yahoo! の API を利用して関連キーワードの表示を行ってきましたが、それらとはまたひと味違ったキーワードが表示されますので、試してみてください。 で、当サイトで「倒産」とともに検索されている企業ですが、「ダヴィンチホールディングス」「青山メインランド」など不動産業が多いようです。どうなるのでしょう…。</description>
      <pubDate>Sun, 20 Sep 2009 23:20:25 +0900</pubDate>
      <category>機能追加</category>
      <author>まいける</author>
          </item>
        <item>
      <title>Twitter 始めてみました</title>
      <link>http://blog.trend-antenna.com/article/30750546.html</link>
      <description> 何となく飛びついてみました（笑）。肩肘張らずに書けるのがいいのかもしれません。ただ、無意識につぶやいていると、プライバシーが漏れまくってしまいそうな予感。 アカウントは、mikenews123 ですので、よろしければフォローよろしくお願いします。</description>
      <pubDate>Thu, 23 Jul 2009 00:13:16 +0900</pubDate>
      <category>その他</category>
      <author>まいける</author>
          </item>
        <item>
      <title>MySQL を 5.1 にアップグレード</title>
      <link>http://blog.trend-antenna.com/article/28988538.html</link>
      <description> さくらインターネットで MySQL の 5.1 が利用できるようになったので、切り替えてみました。既存のデータベースを削除しなければならないので、いったんデータをバックアップしなければならないのが面倒でしたが、移行作業はそれほど手間ではありませんでした（容量が大きかったので、phpMyAdmin からインポートできず、エクスポートしたデータをサーバにアップロードした後、SSH でサーバに接続し、そこから MySQL サーバに接続、mysql コマンドでインポートしたことくらい）。 作業は順調に進んだように見えたのですが、実際に動かしてみるとうまくいきません。日本語を含むキーワードを入れると、データベースのエラーが出ます。この症状は、4.0系から4.1系以上に上げるときによく起こる現象で、PHP に組み込まれている MySQL のライブラリのキャラクターセットと MySQL サーバの設定が一致していないことが原因。 対処方法としては、PHP の再コンパイル（これはかなり面倒）か、MySQL の設定ファイル my.ini にskip-character-set-client-handshakeを追加することなのですが、レンタルサーバではどちらも不可能です。 この場合、SET NAMES utf8を MySQL 接続後に実行することで回避することができますが、この方法にはセキュリティ上の問題が指摘されており、危険性を把握した上でご利用ください。 PEAR の MDB2 を利用している場合、DSN の設定時に'option' =&amp;gt; 'charset=utf8'を指定することで、PHP 側の MySQL の文字コードを変更することができるので、上記の問題を回避することができます。参考リンク4.1以上の壁 (日本語の扱いの違い、文字化け等/含む5.0以上) - MyNA Web Site内PHPからSET NAMESを使わない方が良い理由と対策まとめmysqliをPEAR::MDB2で利用する</description>
      <pubDate>Sat, 09 May 2009 22:21:49 +0900</pubDate>
      <category>MySQL</category>
      <author>まいける</author>
          </item>
        <item>
      <title>「なかのひと」で利用者を分析してみた</title>
      <link>http://blog.trend-antenna.com/article/28517214.html</link>
      <description> 「なかのひと」で Trend Antenna の利用者を分析してみました。結果は下の通り。男女比年齢分布 よく見られるキーワードから、男女比は男性のほうが多いと予想できましたが、年齢層が思ったよりも高くてびっくり。女性アイドルの画像を探している人が多いので、20代から30代の人が中心かと思ってました。 もちろん、「なかのひと」は企業などからのアクセスのみを集計して年齢構成を推測しているので、うちのように企業外ユーザーが多いサイトではサンプルが偏っているのだと思うのですが。</description>
      <pubDate>Thu, 16 Apr 2009 23:15:07 +0900</pubDate>
      <category>その他</category>
      <author>まいける</author>
          </item>
        <item>
      <title>XML_RPC2を使ってみる</title>
      <link>http://blog.trend-antenna.com/article/25729592.html</link>
      <description> どういうわけか、インストールされていたはずの PEAR XML_RPC が削除されてしまっていたので、代わりに後継といわれる XML_RPC2 を使ってみました。XML_RPC2 は PHP5 専用ですが、PHP4 のサポートも終了しましたし、今後こちらが使われることが増えていくでしょう。 XML_RPC2 の特徴として、サーバからのレスポンスをキャッシュすることができるというものがあります。これまで、XML_RPC と Cache_Lite を組み合わせて使っていた人からすると、一つで済むので手間がだいぶ省けると思います。 サンプルとして、Trend Antenna でも使っているはてなダイアリーキーワード連想語APIのサンプルを XML_RPC2 で書いてみようと思います（キャッシュ付き）。require_once 'XML/RPC2/CachedClient.php';$options = array(    'prefix' =&amp;gt; 'hatena.',    'encoding' =&amp;gt; 'utf-8',    'cacheDebug' =&amp;gt; false,    'cacheOptions' =&amp;gt; array(        'cacheDir' =&amp;gt; '/tmp/',        'lifetime' =&amp;gt; 21600,        'automatic...</description>
      <pubDate>Wed, 21 Jan 2009 08:33:35 +0900</pubDate>
      <category>PHP</category>
      <author>まいける</author>
          </item>
        <item>
      <title>docomoの仕様に頭を抱える</title>
      <link>http://blog.trend-antenna.com/article/24040746.html</link>
      <description> おかげさまで PC 版と同じくらいのアクセスをいただいている Trend Antenna のモバイル版ですが、悩ましかったのはアクセス解析。携帯の場合、JavaScript が使えないので、PC 版で使っている Google Analytics は使えません。いくつか公開されているモバイル用のアクセス解析スクリプトを眺めてみましたが、しっくりきません。仕方がないので、自分で作ることにしたのですが、これが意外に面倒だったのです。 一番悩ましかったのは、docomo の仕様。携帯の場合、cookie も使えないことが多いので、同一ユーザーからのアクセスであることを識別するには、セッションを URL に埋め込むか、端末識別番号を取得することになります。セッションを URL に埋め込む方法は、セキュリティ的にどうかと思ったので、端末識別番号を利用する方法を採用することにしました。 幸い、端末識別番号の取得自体は、PEAR の Net_UserAgent_Mobile を使えば、require_once 'Net/UserAgent/Mobile.php';$agent = &amp;Net_UserAgent_Mobile::factory();$uid = $agent-&amp;gt;getUID();で取得できるのですが、docomo の場合、URL に guid=ON を埋め込んでおかないと端末識別番号（docomo の場合はiモードID）が取得できません。おまけに、mod_rewrite で URL の書き換えは NG。つまり、RewriteRule ^m/archive/(.+).html$ m/index.php?guid=ON&amp;amp;keyword=$1 [L]では、取得できないのです。このため、モバイル版では、URL の書き換えをせずに、引数をつけたそのままの形で記述しています（これに伴う問題が別のところで発生したのですが、それはまた別の機会に）。このほかに、フォームで投げるときにも注意すべき点があるのですが、このあたりの詳細については、Tech [Friday] プロモバイルエンジニアブログさんの記事によくまとまっています。 docomo は、リファラは返さないし、アクセスのたびごとに IPアドレスは変わるしで、アクセス解析を行ううえでは、非常に困った仕様です。iモード開始時にはインターネットへの接続を想定していなかったのでしょうし、セッションが終わるまで一つの端末がIPアドレスを固定で持ってしまうとネットワークを有効活用できないという事情はあるのだと思うのですが、モバイルサイトを作るうえで、docomo なかりせば、と思うことが多いのも事実です（外部スタイルシートも使えないですしね）。</description>
      <pubDate>Mon, 08 Dec 2008 23:10:18 +0900</pubDate>
      <category>機能追加</category>
      <author>まいける</author>
          </item>
        <item>
      <title>モバイル版始めました</title>
      <link>http://blog.trend-antenna.com/article/23154583.html</link>
      <description> ふと思い立って、モバイル版を作ってみました。携帯電話からTrend Antennaにアクセスしていただくと表示されると思います。 モバイル版ということで、表示内容は絞ってありますが、PC版にはない動画検索の機能を追加しました。移動中の時間つぶしに使っていただければ幸いです。</description>
      <pubDate>Thu, 20 Nov 2008 23:24:34 +0900</pubDate>
      <category>機能追加</category>
      <author>まいける</author>
          </item>
        <item>
      <title>波ダッシュ問題 on XML_RPC</title>
      <link>http://blog.trend-antenna.com/article/22787792.html</link>
      <description> PEAR の XML_RPC には UTF-8 の文字列の取扱いに不具合があるようで、UTF-8 固有の文字を送信すると文字化けします。例えば、タイトルに挙げた波ダッシュや単位記号（cmやkg）などがこれにあたります（波ダッシュについては、Wikipedia の記事が参考になります）。 解決方法としては、文字列を渡す前にあらかじめ別の文字列に置換しておき、返ってきた結果に対して、逆の置換を行うことが考えられます。例えば、require_once 'XML/RPC.php';$str = (XML_RPCに渡す文字列)// 以下の部分で全角チルダと波ダッシュをいったん naminamimoji に置換$str = preg_replace('#\xEF\xBD\x9E#i', 'naminamimoji', $str);$str = preg_replace('#\xE3\x80\x9C#i', 'naminamimoji', $str);$params = new XML_RPC_Value...</description>
      <pubDate>Wed, 12 Nov 2008 18:30:48 +0900</pubDate>
      <category>PHP</category>
      <author>まいける</author>
          </item>
        <item>
      <title>関連商品情報を変更しました</title>
      <link>http://blog.trend-antenna.com/article/22349895.html</link>
      <description> キーワード検索した際にサイドに表示される関連商品情報を変更しました。これまで Amazon と楽天を併用していましたが、楽天のみに変更するとともに、評価の件数と平均点を表示するようにしました。アフィリエイトの点で Amazon のクリックの有効期間が1日と短いのに対して、楽天が1か月あるというのが変更の大きな理由ではあるのですが、API の使い勝手が楽天のほうがよいというのも変更の理由です（Amazon は、商品写真がきれいというメリットがあるので、個別商品の紹介では引き続...</description>
      <pubDate>Mon, 03 Nov 2008 11:58:38 +0900</pubDate>
      <category>機能追加</category>
      <author>まいける</author>
          </item>
        <item>
      <title>イメージ検索を追加しました</title>
      <link>http://blog.trend-antenna.com/article/22194566.html</link>
      <description> ずいぶん久しぶりの投稿になってしまいました（気になるキーワードのほうはけっこう頻繁に更新してますので、興味のある方はぜひ）。 で、本題ですが、Trend Antenna に関連イメージを表示するようにしました。これは、Google AJAX Search APIを利用して作成したもので、関連する画像を検索して表示しています。画像が表示されることで、画面が少しにぎやかになったと思います。 具体的な実装方法ですが、私の場合は、JavaScript を利用しない方法でこの API を利用しています。詳しくは、ディベロッパーズガイドやクラスリファレンスの該当箇所を読んでもらいたいのですが、PHP の場合は、$json = file_get_contents($googleSearchURL);$resAry = json_decode($json, TRUE);で、取得した JSON オブジェクトを配列に入れることができますので、後は煮るなり焼くなり（笑）。</description>
      <pubDate>Fri, 31 Oct 2008 18:28:34 +0900</pubDate>
      <category>機能追加</category>
      <author>まいける</author>
          </item>
      </channel>
</rss>

