amazonで本のランキング

楽天ブックスは、APIを使うのと楽天ブックスのWebで検索すると違う?
じゃ、アマゾンは、と思い、確認してみた。

アマゾンのAPIは、今年の1月にちょっと調べてそれっきりになっていた。
amazon api のその後
しかも、URLを作るだけで、データを取得してもいない。単に、XMLを表示するだけ。

しょうがいないので、これでパラメータとか確認してみました。

アマゾンでのAPIは、Sort に、salesrank を指定したのと、アマゾンのWeb画面で、本だけにして、「注目度」で検索に結果と同じでした。Sort のキーワード salesrank が、なんで「注目度」なのかはよくわらんが。

じゃ、楽天ブックスは、というと、これから調べます。

楽天ブックスのAPIを使う(その2)

楽天ブックスのAPIを使ってのPHPプログラムです。
昨日、別のAPIを使う必要があると解り、今日、さっそく作りました。
(趣味でやっているプログラムなので、土日休みだと、2日続けてやれます。)

使ったのは「楽天ブックス総合検索API」
楽天ブックス総合検索API

こっちは、検索のキーワードが、楽天市場商品検索と同じ keyword になります。
また、昨日使った楽天ブックス書籍検索とは、出力データが違うので手を入れる必要がありました。

keyword に「PHP」を含む、ジャンルが「パソコン・システム開発」と思われる本は、80件が該当しました。それを、CSV形式でとりあえず画面に表示する、PHPのバッチ用スクリプトにしました。
まだ評価段階なので、Webページにはしてません。

作成したのは、次の3つ。
config.php : 楽天APIにアクセスするためのIDを格納するファイル
専用のクラスを記載したファイル
実行用のPHPファイル

まず、config.php は、楽天APIのサイトからダウンロードできるサンプルを同じしてます。
次に、クラス記述したファイルは、こんなのにしました。
Webサイトにデータを表示する処理は、まだ作ってません。これから追加するつもりです。

rwsclient = new RakutenRws_Client();
    if(! $this->rwsclient ) {
      echo "RakutenRws_Client クラスの生成に失敗しました\n";
      exit;
    }
    // アプリIDをセット Set Application ID
    $this->rwsclient->setApplicationId(RAKUTEN_APP_ID);
    // アフィリエイトIDをセット (任意) Set Affiliate ID (Optional)
    $this->rwsclient->setAffiliateId(RAKUTEN_APP_AFFILITE_ID);
  }

  function get_bookdata( $keyword, $page ) {
    if( $this->rwsclient === null ) {
      $this->initalize();
    }
    try {
      $response = $this->rwsclient->execute( $this->rakuten_app, array(
      'keyword'   => $keyword,
      'booksGenreId'   => "001005005006",
      'page'    => $page,
      'hits'    => 30,
      'sort'    => 'sales'
      ));
      return( $response );
    } catch(Exception $e) {
      echo "Client execute error :", $e->getMessage(), "\n";
      exit;
    }
  }

  function data_store( $response ) {
    foreach( $response as $item ) {
      for( $i=0; $i < count($this->books_t); $i++ ) {
        $this->books_datas[$this->books_count][$this->books_t[$i]] = htmlspecialchars(mb_strimwidth($item[$this->books_t[$i]], 0, 80, '...', 'UTF-8'));

// echo "Debug: ", $this->books_count, " : ", $i, " : ", $this->books_t[$i], " : ", $this->books_datas[$this->books_count][$this->books_t[$i]] , "\n";
      }
      $this->books_count++;
    }
  }

  function data_dump() {
    echo "title,subTitle,author,publisherName,size,isbn,itemUrl\n";
    for( $i=0; $i < count($this->books_datas); $i++ ) {
      for( $j=0; $j < count($this->books_t); $j++ ) {
        if( $j > 0 ) {
          echo ",";
        }
        echo $this->books_datas[$i][$this->books_t[$j]];
      }
      echo "\n";
    }
  }
}

そして、テスト用のPHP実行用ファイル。

initalize();
$page_count = 1;
for( $i=1; $i <= $page_count; $i++ ) {
  $response = $bs->get_bookdata( $keyword, $i );
  if( $response && $response->isOK() ) {
    $bs->data_store( $response );
    if( $page_count == 1 ) {
      $page_count = $response['pageCount'];
    }
  }
}
// 検索した結果を画面に表示します。
$bs->data_dump();
?>

なにせ、1ページに30件、という制限があるので、すべて取り出すには、全ページにアクセスして、まとめて表示することになります。

結果を楽天ブックスの実際の画面と比べてみると、なんか違う。
なんで、違っているかは、まだ、確認できてません。まだ何かあるのかも。

楽天ブックスのAPIを使う

楽天には、アフェリエイト用に、商品のデータにアクセスするためのAPIが用意されている。何か、プログラムの題材に使えないのかな、と考えていたのだが、いまいち思いつかない。
実は、楽天ショップの商品には、統一の商品コードが無く、お店が自由に設定できるらしい。そのため、ある商品を検索すると、いろいろな商品名がでてくる。

しかし、本は、共通のコードがあるので、それで管理されているため、ISBNコードにつき必ず1つの本が検索されるらしい。
ということで、本に絞って、特定のキーワードを含む本のランキングを表示するAPIは、おもしろいかもしれない、ということで、今日、調べてみました。

まずはここ。
楽天ウェブサービス:API一覧

そして、楽天ブックスのAPI。
楽天ウェブサービス:楽天ブックス書籍検索API

更に、これも使う。
楽天ウェブサービス:SDK一覧

SDKには、サンプルが付いているので、まずはこれを使って加工する。
でやってみたのだが、なんかうまくいかない。
サンプルの index.php は、エラー処理がかかれていないので、何で出ないのか解らない。
おかげに、SDKのソースを追いかけるはめに。
うまくいかない原因は、引数に何も入っていないから、というオチでした。

順調に表示するようになったのだが、次の問題発生。このAPIは、1ページに表示する本の数が、1から30までに制限されている。
例えば、タイトルに「PHP」を含む本を検索すると、134冊もヒットする。
ヒットした本すべて取り込みたい。
でも、1回目を取り込みしないと、何ページあるかわからない。

じゃ、という訳で、
1回目は普通にAPIを呼び出して、データを格納する。
この時のページ数を控えておく。
ページ数が1より大きい場合は、ループを回して、APIを呼び出し、データを格納の動作をページ分だけ繰り返す。
最後に、CSVにしてファイルに書き出す。

そこまでなんとかできました。
しかし、落としたファイルをよく見ると、PHP出版のプログラムに関係の無い本もふくまれています。
「プログラム言語PHP」の本のランキング、となると、更にジャンルを調べて関係のない本を除く必要が。

ということで、楽天ブックス総合検索APIで、ジャンルまで指定して検索する必要がありました。やりなおし、ということに。
(ジャンルとコードの一覧表を予め作っておく必要があるみたいです。)

Yahoo Api を使ってみる(地図)

今日、Webサイトを調べていたら、あやしい地図を発見した。
Google Map を、何も考えないでWebページに貼り付けると、ルーラーとかのアクセサリが普通に使える。しかし、そのサイトに貼ってあった地図は、アクセサリが付いてなかった。マウスでドラッグすると動くので、画像ではない。どうなっているんだろう、と思い、Yahoo api で作る地図も調べてみよう、と思った。

Yahoo API を使うには
Goggle API とそっくりです。詳しくは、Yahoo で、Yahoo Api を検索すると一番上に出たページを見てください。
YAHOO デベロッパーズ・ネットワーク

サンプルをやってみよう
解り易い例が載ってます。このとおりに作ると、やっぱりアクセサリが出ません。
アクセサリの出し方は、その例の下に使い方が載ってました。

Google Map 風に書き換えるとこんな感じ。

function map_view() {
    var mapopt = {
      configure : {
        doubleClickZoom : false,
        scrollWheelZoom : true,
        singleClickPan : false,
        dragging : true
      }
    };
    var ymap = new Y.Map("map", mapopt);
    var latlng = new Y.LatLng(38.2865544,140.318898);
    ymap.drawMap( latlng, 17, Y.LayerSetId.Normal);

    var control1 = new Y.ScaleControl();
    var control2 = new Y.SliderZoomControlHorizontal();
    ymap.addControl(control1); 
    ymap.addControl(control2); 

    var label1 = new Y.Label( latlng, "株式会社テクノ・サービス 山形営業所" );
    ymap.addFeature( label1 );
}

これは、ここを参照。
YAHOO地図の例

クレジットカードってこんなに便利だったんだ

今ごろですが、クレジットカードがいかに便利かを調べています。

今までは、「クレジットカードを使う」=「借金をする」というイメージが強く、抵抗がありました。
私の両親は、若いころお金で苦労したせいで、借金が嫌いでした。その影響があって、私も借金には抵抗があります。クレジットカードを持ったのは、社会人になってしばらくしてから、いとこからノルマ達成のために作ったのですが、何年も使わずにいたくらいです。

最初に作ったのは「JCB」のカードだったのですが、どうしても「VISA」でのカードによる支払いが必要になり、作ったカードもありますが、やっぱり使う機会がありません。

最初に作ったカードは、「セゾンカード インターナショナル」。
年会費はかかってません。
今は、毎月の支払いとかにも使っているので、少しですがポイントも貯まっています。
しかし、そのポイントを使う方法もよくわからず、そのままにしてました。

今日、YouTubeで、ホリエモンのインタビューを聞いていて、クレジットカードを使うのは借金でもなんでもない。紙幣はそれ自体に価値が無いのに、日本銀行の信用で物と交換ができるだけ。クレジットカードは、クレジット会社の信用で物と交換ができる訳だから、その信用を壊さない範囲で使った方がいい、というのを聞いて、調べることにしました。改めて調べたところ、このカードの特徴である、「永久不滅ポイント」うまく使えば、いろいろとメリットがあることに気がつきました。

1.永久不滅ポイントとは
永久不滅ポイントは、セゾンカードの毎月のご利用合計金額1,000円ごとに1ポイント貯まる仕組みです。
残念ながらキャッシングでは、ポイントは貯まりません。

私は、社会人になってから、ずっと給料を銀行振込でもらっています。最近は、通帳と銀行カードを妻に預けているので、自分でATMからお金を下ろすことはありません。必要なら妻に言うのですが、妻は最低限のお金しか家に置いてないので、クレジットカードのキャッシングを利用する機会が増えていました。

クレジットカードのキャッシングでお金を下ろして、クレジットカードが使えるコンビにとかで買い物して訳で、なんてもったいないことをしていたのか、と悔やんでいます。

2.セゾンカードのポイント増額が利用できるお店は
セゾンカードで使って買い物をすると、通常の何倍ものポイントがもらえる店があることが解りました。
注目すべきは、アマゾンと楽天です。

アマゾンからは、本以外にもいろいろな商品を購入する機会があります。いつもクレジットカードで支払いをしてきたのですが、知らないうちにポイントがついていました。しかし、専用のWebページからアマゾンにアクセスするだけで、2倍から最大7倍ものポイントが付いたかもしれません。
アマゾンを利用する

アマゾンで3倍以上のポイントが付くのは、ファッション関係のみみたいで、私は利用しませんが、2倍のポイントがついて、それを利用できるのであれば、メリットは十分にあると思います。
同様に、楽天も専用のページからアクセスするとクレジットカードでの支払いでポイントが増加します。

他にも、ネットで買い物する場合にポイントが付くものが多いので、クレジットカードの支払いには注意しようと思います。
永久不滅ポイント

3.買い物以外にポイントを貯める方法
永久不滅ポイントのWebページを見ると、買い物以外にもポイントを貯める方法が幾つか用意されています。
・商品アンケートで貯める
 Webのアンケートに答えるだけ
・レシートで貯める
 レシートをデジカメでとって、対象商品を購入した理由を添えて登録するだけ。
・CMを見るだけ
 WebのCMアンケート画面から指定のCMを見るだけ
・ビンゴゲームで貯める
 Webのビンゴゲームに挑戦します

他にもポイントをもらえる方法があるので、自分にできそうなものは挑戦してみたいと思います。
永久不滅のポイント サービスカテゴリ

4.その他にポイントが付くもの
永久不滅ポイントは、クレジットカードで支払いすれば、1000円ごとに1ポイントつく訳なので、実はいろいろな支払いでポイントが付きます。
こんなのでも、ポイントが付くというのがあります。

・自動車税
山形県の場合、yahoo 公金支払いを経由して、クレジットカードでの支払いを利用することができます。
yahoo公金支払いのページ

5.永久不滅ポイントを支払いに使う
貯まったポイントを、クレジットカードの支払いにあてることができます。
ポイントdeお買物

200ポイントを使って、900円分の支払いに当てることができます。
この手続きは自動ではなく、Netアンサーを解して、毎月6日までに交換手続きを行うと、翌月ご請求分から引かれる仕組みになっています。ポイントの残高を見て、手続きすることで、ポイントを有効に使うことができる訳です。

とにかく、今まではクレジットのポイントをあまり考えずに使っていました。これからは、うまく使っていこうと思います。

WordPress改造中

このブログページ、改造してます。

ここは、メニューで固定ページを開くようにしてます。
最初の画面も、もちろん固定ページ。
今日は、メニューの「WordPress改造」で開く、固定ページを修正しました。

開いてもらうと、WordPressのテーマの縮小画像が表示されているかと思います。
これをスライドにして、一定時間で画像が切り替わるようにしました。

通常の固定ページに、このスライドを埋め込むだけのスキルは無いので、固定ページを表示するPHPファイルを加工してます。

今回やったのは、次の2点。
function.php に、silider-Pro に関するJavascriptファイルと、スタイルシートのファイル取り込みを追加したこと。幸い、このテーマには、そういったファイルを追加する仕組みが作ってあったので、流用しました。
page.php に、特定の固定ページが表示されたら、そのページ特有の処理を行うように改造し、そこに画像を切り替える仕組みを作ったこと。以前、ローカル環境で動作確認したソースを流用しました。

page.php での切り替えは、is_page() に、ページIDwo指定して判定させてます。

具体的には、今回の対象の固定ページのURLから、

WordPress改造


IDが、126 だと解ります。
これを使って、is_page() で判定させます。
こんな感じ。

 if( is_page("126") ) { /* 固定ページIDが、126 なら、...を処理する */
    ....
 }
 the_post();  /* これが、固定ページを表示する処理 */

画面が小さくてインパクトにかける、というのはありますが。

テーマを更新したものの

テーマを更新したものの、なんかさみしい、と思って、最近の記事5つを表示してみました。

まあ、表示するようにはなったのですが、何も考えずにやったので、メニューに関係なく5つ表示してます。ホーム以外の固定ページでは、表示する必要がないので、その辺、うまく作ればよかったのですがね。

ここは、そのうち時間があいた時にかな。
というか、各固定ページも、もっと充実させたいし。

テーマを変更しました

このブログのテーマを変更しました。
きっかけは、ここが管理されていないことで、スパムっぽいコメントが登録されるようになったから。
管理が面倒なので、最初からコメントを残せないようにしました。

ついでに、テーマも変更してます。
基本的になんでもやかったのですが、ブログに使うテキストがメインのテーマ、という基準で選びました。まだ、カスタマイズの途中なので、用意されている機能を使いきれていません。

コメントの記入欄を削除するのは、簡単です。

WordPress は、PHPで書かれているので、コメントを記入する機能を外してしまばいい訳です。
コメントを記入する機能は、WordPress の comments_template() で実現されます。
ブラウザに表示する機能を実現するPHPファイルに記載された、このコメントの機能を無効にします。

今使っているこのサイトのテーマは、the-bootstrap です。
このテーマに用意されたコメントを入力できる画面を作成するPHPファイルは、次の2つです。

page.php
simgle.php

それと、このテーマは、コメント欄を、「Leave a replay」としています。
なんと記事毎に「Leave a reply」というリンクが設定されています。
これも表示しないようにしました。
このリンクを表示しているPHPファイルは、これです。

inc/template-tags.php

以上3つのPHPファイルから、コメントを表示する機能を無効化することで、コメント記入欄が表示されなくなりました。

すいません、この記事に対してもし、コメントしたい場合は、Facebook の私のアカウントへお願いします。(アカウント名は muzina_630 です。)

JavaScriptをトライ中(その3)

JavaScript を使って、郵便番号からグーグルマップを表示するWebページの作成、途中経過。

まず、郵便番号から住所を取ってくるのはOK。
デバックで使っている Chrome (Ubuntu 版)の制限で、非同期通信の為のスクリプトが必要なので、ここの環境もあって、テキスト扱いで処理することになったくらい。
いい感じでできてました。
http://muzina6301.daiwa-hotcom.com/gmap2/ziptoaddr.html

次に、Google Map 。こっちは、郵便番号から取得した住所を指定して、そこを中心(必ずしも中心とはならないみたいですが)に、地図を表示するのもOK。
これは、Google Map Api の geometry の機能を利用しました。
この機能については、ネットをぐぐると使い方を説明した記事がけっこうでてきます。
本家の Google にもサンプルがあるので、参考になります。

最後に、郵便番号から取得した住所のエリアを表示する。
これは、ネットをぐぐっても、いい例がありません。
マウスでクリックした場所の住所から、その住所の領域を表示する例がありました。

「グーグルマップ地図上に全国自治体などの境界を表示する」
http://www.benricho.org/map_boundary/

ここを参考にさせてもらい、google map api で、ポリゴン図形を描いて境界を作成することができると解り、今回使わせてまらいました。

まだ、作成途中ですが、こんな感じです。
http://muzina6301.daiwa-hotcom.com/gmap2/ziptomapa.html

動いただけで、まだまだ、JavaScript の使い方も、勉強中です。
今回やってみて、もっとうまくプログラムを書けるようになりたいな、と改めて思いました。