Java 楽天API 〜Javaで楽天の商品情報をゲット〜

イントロダクション

ここ最近は、人工知能(機械学習)の学習を進めようとネットを検索しては首をひねっています。

そこで、ちょっとPHPでかじったのでJavaでやってみようと思いました。

楽天API with Java

ちょっと古いけど、このサイトを参考に作成します。

そして作りました。シンプルに以下の手順を踏みます。

  1. 参考サイトにあるURLにリクエスト(GET)を送信
  2. 値を取得する

※パラメータを設定してやる必要があります。詳細は参考サイトをみてください。

<ソース>

	/**
	 * 【実行方法】参考サイトより
	 * https://app.rakuten.co.jp/services/api/IchibaItem/Search/20170706?
	 * applicationId=[アプリID]
	 * &keyword=検索したいキーワード
	 * &sort=%2BitemPrice
	 * 
	 * @param keyword 検索するときのキーワード
	 */
	public void exeRakutenAPI(String keyword) {
		StringBuilder RAKUTEN_API = new StringBuilder(prop.getProperty("pUrl"));
		RAKUTEN_API.append("applicationId=" + prop.getProperty("applicationId"));
		RAKUTEN_API.append("&keyword=" + keyword);
		URLConnection connection = null;
		try {     // ここの部分でリクエスト送信と結果の取得
			URL url = new URL(RAKUTEN_API.toString());
			connection = url.openConnection();
			BufferedReader buf = new BufferedReader(new InputStreamReader(connection.getInputStream()));
			String tmp = "";
			while((tmp = buf.readLine()) != null) {
				System.out.println(tmp);
			}
		} catch(IOException e) {
			e.printStackTrace();
		}
	}


取得したデータ(アイテム1件分)

"Items":[{"Item":{"itemName":"クリスタルガイザー(500mL*48本入)【クリスタルガイザー(Crystal Geyser)】[水 ミネラルウォーター 500ml 48本ケース]【送料無料(北海道、沖縄を除く)】", 
"catchcopy":"クリスタルガイザー / クリスタルガイザー(Crystal Geyser) / 水 ミネラルウォーター 500ml 48本ケース", 
"itemCode":"soukaidrink:10000912", 
"itemPrice":2136, 
"itemCaption":"お店TOP>ミネラルウォーター>海外ミネラルウォーター>クリスタルガイザー (500mL*48本入)☆送料無料(北海道、沖縄を除く)☆【クリスタルガイザーの商品詳細】アメリカの定番ミネラルウォーター、クリスタルガイザー。まとめ買いに最適!クセが少なく飲みやすいので、水分補給にそのまま飲むもよし、コーヒー・お茶などの飲料用、お米やお料理等、体に取り入れる水としていろいろな場所場面で大活躍!また、職場・学校・お店・レジャー等外出先にも持って行っていろいろな場面で使えますよ。非常時の備えとして防災グッズとあわせて備蓄しておくのもおすすめです。【クリスタルガイザーの原材料】水(湧水)【栄養成分】カリフォルニア・オランチャ水源(100mLあたり)エネルギー・・・0kcaLたんぱく質・・・0g脂質・・・0g炭水化物・・・0gナトリウム・・・1.91mgカルシウム・・・2.24mgマグネシウム・・・0.27mgカリウム・・・0.26mg硬度・・・67mg/Lウィード・シャスタ水源(100mLあたり)エネルギー・・・0kcaLタンパク質・・・0g脂質・・・ 0g炭水化物・・・0gナトリウム・・・1.13mgカルシウム・・・ 0.64mgマグネシウム・・・0.54mgカリウム・・・0.18mgバナジウム・・・ 5μg硬度・・・38mg/L【保存方法】・高温、直射日光をさけて保存してください。・開栓後は冷蔵庫に入れ、お早めにお飲みください。・容器のまま、加熱、凍結はしないでください。・加熱、凍結、長期保存等により白い沈殿物ができる事がありますが、天然のミネラル成分の結晶ですのでご安心ください。【注意事項】・キャップが小さく、開けづらくなっております。開封時にはプラスチック部分で指などを切らないようご注意ください。【ブランド】クリスタルガイザー(Crystal Geyser)【発売元、製造元、輸入元又は販売元】Rakuten Direct本品は並行輸入品です。パッケージ等、予告なく変更される場合がございます。予めご了承ください。賞味期限はボトル上部にSELL BY MM.DD.YYと記載されております。 例)10.08.20XX→20XX年10月8日まで採水地は2か所(オランチャ・シャスタ)ございますがお選びいただくことはできません。リニューアルに伴い、パッケージ・内容等予告なく変更する場合がございます。予めご了承ください。(ケース セット Crystal Geyser クリスタルカイザー 0.5L クリスタルゲイザー)/ケース//(/F206803/F200201/F221807/F214903/F201603/F233602/)/Rakuten Direct810-0001 福岡県福岡市中央区天神1丁目15番6号050-5306-1825広告文責:Rakuten Direct株式会社電話:050-5306-1825[ミネラルウォーター/ブランド:クリスタルガイザー(Crystal Geyser)/]", 
"itemUrl":"https://item.rakuten.co.jp/soukaidrink/9000009984074/", 
"shopUrl":"https://www.rakuten.co.jp/soukaidrink/", 
"smallImageUrls":[{"imageUrl":"https://thumbnail.image.rakuten.co.jp/@0_mall/soukaidrink/cabinet/74/9000009984074.jpg?_ex=64x64"}, 
{"imageUrl":"https://thumbnail.image.rakuten.co.jp/@0_mall/soukaidrink/cabinet/74/9000009984074-2.jpg?_ex=64x64"}, 
{"imageUrl":"https://thumbnail.image.rakuten.co.jp/@0_mall/soukaidrink/cabinet/74/9000009984074-3.jpg?_ex=64x64"}], 
"mediumImageUrls":[{"imageUrl":"https://thumbnail.image.rakuten.co.jp/@0_mall/soukaidrink/cabinet/74/9000009984074.jpg?_ex=128x128"}, 
{"imageUrl":"https://thumbnail.image.rakuten.co.jp/@0_mall/soukaidrink/cabinet/74/9000009984074-2.jpg?_ex=128x128"}, 
{"imageUrl":"https://thumbnail.image.rakuten.co.jp/@0_mall/soukaidrink/cabinet/74/9000009984074-3.jpg?_ex=128x128"}], 
"affiliateUrl":"", 
"shopAffiliateUrl":"", 
"imageFlag":1, 
"availability":1, 
"taxFlag":0, 
"postageFlag":1, 
"creditCardFlag":1, 
"shopOfTheYearFlag":0, 
"shipOverseasFlag":0, 
"shipOverseasArea":"", 
"asurakuFlag":0, 
"asurakuClosingTime":"", 
"asurakuArea":"", 
"affiliateRate":1, 
"startTime":"", 
"endTime":"", 
"reviewCount":21459, 
"reviewAverage":4.56, 
"pointRate":1, 
"pointRateStartTime":"", 
"pointRateEndTime":"", 
"giftFlag":0, 
"shopName":"爽快ドリンク専門店", 
"shopCode":"soukaidrink", 
"genreId":"201351", 
"tagIds":[1003704, 
1003726, 
1003729, 
1003741, 
1003798, 
1007192]}},

ふー、一服でもついて寝よう

Java MeCab 〜Javaで品詞分解してみよう〜

イントロダクション

前回、PythonでMeCabを使える様にセットアップしました。今回はJavaでも使える様にします。

MeCab Javaから使うには?

ここのページから最新のファイルをダウンロードします。

日付の部分が最新のものを洗濯してダウンロードしてください。

そして展開したら、辞書をUTF-8でビルドします。

などなど。。。使用方法があるのですが「Javaから直接コマンド叩いた方が早くね?」と思いましたので「Runtime.exe(コマンド)」でいこうと思います。作成したコードは以下になります。

public class AutoBlogPoster {
	public static void main(String[] args) throws Exception{
		String[] cmd = {"/bin/sh", "-c", "echo マイクロソフトバンク | /usr/local/mecab/bin/mecab -O simple"};
		Process process = Runtime.getRuntime().exec(cmd);
		BufferedReader buf = new BufferedReader(new InputStreamReader(process.getInputStream()));
		String line = "";
		while( (line = buf.readLine()) != null) {
			System.out.println(line);
		}
	}
}


Java ワンポイントレッスン〜Javaからコマンドを叩く〜

コンソール画面、ターミナルから「echo "タイガーマスク" | echo ": 伊達直人"」とコマンドを叩くのと同様なことをJavaで行う

public static void main(String[] args) throws Exception{
    String[] cmd = {"/bin/sh", "-c", ¥"タイガーマスク¥" | echo ¥": 伊達直人¥""};
    Process process = Runtime.getRuntime().exec(cmd);
    BufferedReader buf = new BufferedReader(new InputStreamReader(process.getInputStream()));
    String line = "";
    while( (line = buf.readLine()) != null) {
        System.out.println(line);
    }
}

こんな感じに、シェル経由で実行してやればオッケー

コマンドを実行するというところで、「こんな感じ!」という動画がありますので、よかったらどうぞ。

コマンド使用時の注意

ただし、ユーザー指定の環境変数を使用しているコマンドはパスを指定してやらないと動かない。。。

「echo」コマンドは動くけど、新たにインストールした「mecab」コマンドは動かない・・・

mecabにパスが通っていないので動きません・・・
チャンチャン(笑)

関連ページ一覧

Eclipse セットアップ

  1. Java Install Eclipse〜開発ツールのインストール〜
  2. TensorFlow C++環境〜EclipseCDTをインストール〜
  3. Setup OpenGL with JavaJOGLを使う準備 for Eclipse
  4. Eclipse Meven 開発手順〜プロジェクトの作成〜
  5. Java OpenCV 環境セットアップ(on Mac)
  6. Eclipse SceneBuilderを追加する
  7. JavaFX SceneBuilder EclipseSceneBuilder連携~

Java Basic一覧

  1. Java Basic Level 1 〜Hello Java〜
  2. Java Basic Level2 〜Arithmetic Calculate〜
  3. Java Basic Level3 〜About String class〜
  4. Java Basic Level 4〜Boolean〜
  5. Java Basic Level 5〜If Statement〜
  6. Java Basic Summary from Level1 to 5
  7. Java Basic Level 6 〜Traning of If statement〜
  8. Java Basic Level8 〜How to use for statement〜
  9. Java Basic Level 8.5 〜Array〜
  10. Java Basic Level 9〜Training of for statement〜
  11. Java Basic Level 10 〜While statement 〜
  12. Java Basic Swing〜オブジェクト指向〜
  13. Java Basic Swing Level 2〜オブジェクト指向2〜
  14. サンプル実装〜コンソールゲーム〜
  15. Java Basic インターフェース・抽象クラスの作り方
  16. Java Basic クラスとは〜Step2_1〜
  17. Java Basic JUnit 〜テストスイートの作り方〜

Git関連

  1. Java Git clone in Eclipse 〜サンプルの取得〜
  2. Eclipse Gitリポジトリの取得 GitからソースをPullしよう〜
  3. IntelliJ IDEA GitGitリポジトリからクローン〜

Python Mecab〜日本語を分解してみよう〜

イントロダクション

Javaの基本がわかったら今度は何か作ってみたいのが人情。。。今回は日本語を品詞分解してくれるライブラリ「Mecab」があったのでそれを使用する方法→開発環境のセットアップ方法を記載します。

Mecab本体のダウンロード

本家のホームページ

<手段1>:ブラウザにURLの部分に「https://drive.google.com/uc?export=download&id=0B4y35FiV1wh7cENtOXlicTFaRUE」を入力してEnterキーを押下するとダウンロードできます。(tar.gz)ファイルなのでそれを解凍します。

展開したら下の様にコマンドを叩いてインストールします。(Mac & Linux)

    • 一般的なフリーソフトウェアと同じ手順でインストールできます。
       % tar zxfv mecab-X.X.tar.gz
       % cd mecab-X.X
       % ./configure 
       % make
       % make check
       % su
       # make install
      

辞書のインストール

% tar zxfv mecab-ipadic-2.7.0-XXXX.tar.gz
% mecab-ipadic-2.7.0-XXXX
% ./configure
% make
% su
# make install

Pythonから使える様にする

ダウンロードして展開したフォルダの直下に「README」ファイルがあるのでそれを開きます。自分のところにあったのは下の様に書いてありました。

MeCab python module

$Id: README,v 1.1.1.1 2005/12/03 14:18:50 taku-ku Exp $;

1. Installation

  % python setup.py build
  % su
  # python setup.py install
  
  You can change the install directory with the --prefix option. For example:

  % python setup.py install --prefix=/tmp/pybuild/foobar
  
2. How to use?

   see 'test.py' as a sample program.

このファイルがあるディレクトリ(フォルダ)と同じ場所に「setup.py」があるのでそれを叩けばオッケ!ターミナルを開いてこのディレクトリに移動します。ターミナルの細かい使用方法に関してはこちら

python setup.py

これで完了です。

ちょっと動かして見る。「python」コマンドでpythonコマンドの入力モードに入ります。ここでコードを作成して実行できます。

$python
>>> import MeCab
>>> m = MeCab.Tagger("-Ochasen")
>>> print m.parse("大好評!ハンコック KMMEESS")
大	ダイ	大	接頭詞-名詞接続		
好評	コウヒョウ	好評	名詞-一般		
!	!	!	名詞-サ変接続		
ハンコック	ハンコック	ハンコック	名詞-一般		
KMMEESS	KMMEESS	KMMEESS	名詞-固有名詞-組織		
EOS

とりあえずこんな感じでした。

PHP 楽天API WordPress〜楽天プラグインを使う〜

イントロダクション

楽天APIを使用して商品検索を行うことはできる様になりました。

次は商品を紹介するためのページを作成します。そして最後にプラグインのしよう結果を記載します。

少しずつ確実に。。。

人間誰しも、いっぺんになんでもできません。なので1つずつ確実にやっていこうと思います。

とはいえ「確実」と言っても「確実に表示する」という意味でやって行きます。

前回はただ単に表示しただけなので、今回は少し色気をつけてみました。

取得したデータをテーブルタグを使用して揃えたものをループしただけです。デザインは苦手なのでこんなくらいがいっぱいいっぱいです。

それでも、まぁ形にはなったかな?と思います。ついでなのでデータを再検索する様に処理を追加しました。

function researchRctn() {
	var param = document.getElementById('category').value;
	console.log(param);
	location.href = "http://zenryokuservice.com/project/rakuten/php/rakutenCatalog.php?category=" + param;
}

上のコードを追加してボタンのクリックで起動する様にしました。

< input id="category" type="text" /><button>商品をリロード</button>

ついでに楽天プラグインを使って見る

「R」ボタンを押下して表示した文字は「rakuten ids=XXX」の様な文字が下に表示されただけですが、これはちゃんと投稿後にイメージなどが表示されるのでしょうか?


MeCab インストール〜Pythonバインディングも〜

イントロダクション

前回は、楽天APIをやりました。なんとか検索〜結果の取得まで行きました。が「デザイン」で切羽詰まったのでアプローチを変更します。

動的ブログ生成

ブログを生成する様にプログラムを作成しようと思います。手順は以下の様にやろうと思っています、※できなかったら他の方法をやります。

  1. 自分で作成したカテゴリから乱数でどれかを選択する
  2. 指定されたカテゴリをキーワードにしてTwitter検索をかける
  3. 取得したツイートから初めの10件文のデータ(つぶやき)からキーワードになる値を取得する
  4. 取得したキーワードで楽天APIから商品候補を取得〜表示

この様に考えています。そして3の部分で使用するのが「Mecab」です。京都大学情報学研究科−日本電信電話株式会社コミュニケーション科学基礎研究所 共同研究ユニットプロジェクトで作成された様です。よーしいいぞ!日本!

そしてインストールして実行した結果

品詞分解してくれます。。。そしてこいつをPHPでしようしようじゃないかというわけです。

参考にしたサイトはこちら

とりあえず調べて見るとPHPでのバインディングなありませんでした。。。つまりPHPでは使用できないというわけです。。。駄菓子菓子!PHPもPythonもすでに触っているし、厄介なのは言語のナマリくらいだしPythonの方が親しみがあるのでそのまま行きます。ちなみにPHPでPythonを使用するときは以下の様にやります。

<?php 
   $command = "python XXXX.py"
   $res = exec($command);
?>

シンプルなものです。

MeCabPythonのインストール

ここからPythonバインディングをダウンロードします。ダウンロードした中にREADMEファイルがあるのでそれをみます。自分がみたものは下の様に書いてありました。

MeCab python module

$Id: README,v 1.1.1.1 2005/12/03 14:18:50 taku-ku Exp $;

1. Installation

  % python setup.py build
  % su
  # python setup.py install
  
  You can change the install directory with the --prefix option. For example:

  % python setup.py install --prefix=/tmp/pybuild/foobar
  
2. How to use?

   see 'test.py' as a sample program.

その通りにインストールします。そしてそれをサーバー上にアップロードします。あとはPHPからPythonにアクセスするだけで良い様にします。→Pythonでその様な処理を実装するという意味です。

でわでわ。。。


Rakuten API PHP〜楽天SDKを開けて見る(part3)〜

イントロダクション

前回は、楽天APIでのハローワールドを行ってみました。

今回は、取得したデータを一覧表示してみようと思います。

つまづいたところ

ひとえに「PHP仕様」につまづきました。愚痴っぽくなってしまいますがPHPの仕様なのか、配列の中に配列が入っているのでJavaとのギャップに少しつまづきました。

変数の中身を「var_dump()」で出力して中身を確認しながらやりました。

これでどの様に表示するかを考えます。ポイントは以下

  1. APIから取得したデータがなんなのか?→画像、説明文、商品名 etc..
  2. それぞれに適した表示方法を考える
  3. HTML + JSでクールに表示


作成したコード ※下のコードを実行

	header("Content-Type: text/html; charset=UTF-8");
	// エラーを出力する
	ini_set('display_errors', 1);
	require_once('../rws-php-sdk-1.1.0/autoload.php');

	$client = new RakutenRws_Client();
	// アプリID (デベロッパーID) をセットします
	$client->setApplicationId('1069312965684050347');

	// アフィリエイトID をセットします(任意)
	$client->setAffiliateId('178fb567.f874f0a0.178fb56b.ec8a5021');

	// IchibaItem/Search API から、keyword=うどん を検索します
	$response = $client->execute('IchibaItemSearch', array(
	  'keyword' => '本'
	));

	// レスポンスが正しいかを isOk() で確認することができます
	if ($response->isOk() == false) {
	    // 配列アクセスによりレスポンスにアクセスすることができます。
		echo 'Error ]:'.$response->getMessage();
		return;
	}
	$line_separator = "
";
	$tab = "   ";
	// 取得する項目リスト
	print("<ルート>" . $line_separator);
	print("[ カウント ] ]: " . $response['count'] . $line_separator);
	print("[ ページ ]: " . ['page'] . $line_separator);
	print("[ ファースト ]: " . $response['first'] . $line_separator);
	print("[ ラスト ] ]: " . $response['last'] . $line_separator);
	print("[ ヒット ] ]: " . $response['hit'] . $line_separator);
	print("[ キャリア ]: " . $response['carrier'] . $line_separator);
	print("[ ページカウント ]: " . $response['pageCount'] . $line_separator);
	print("<アイテム>". $line_separator);
	foreach($response as $items) {
		print($tab . "[ アイテム名 ]: " . $items['itemName'] . $line_separator);
		print($tab . "[ キャッチコピー ]: " . $items['catchcopy'] . $line_separator);
		print($tab . "[ アイテムコード ]: " . $items['itemCode'] . $line_separator);
		print($tab . "[ アイテム値段 ]: " . $items['itemPrice'] . $line_separator);
		print($tab . "[ キャプション ]: " .$items['itemCaption'] . $line_separator);
		print($tab . "[ アイテムURL ]: " . $items['itemUrl'] . $line_separator);
		print("<小画像>". $line_separator);
		if (is_array($items['smallImageUrls'])) {
			if (count($items['smallImageUrls']) != 0) {
				$urls = $items['smallImageUrls'];
				print(" <<< var_dump() >>>" . $line_separator);
				var_dump($urls);
				print($line_separator . " <<< End of var_dump() >>>" . $line_separator);
				foreach($urls as $smallImageUrl) {
					print($tab . $tab . "画像(小)" . $smallImageUrl['imageUrl'] . $line_separator);
				}
			}
		} else {
			print("[小画像]: 小画像なし" . $line_separator);
		}
		print("<中画像>". $line_separator);
		if (is_array($items['mediumImageUrls'])) {
			if (count($items['mediumImageUrls']) != 0) {
				$urls = $items['mediumImageUrls'];
				foreach($urls as $mediumImageUrl) {
					print($tab . $tab . "画像(中)" . $mediumImageUrl['imageUrl'] . $line_separator);
				}
			}
		} else {
			print("[小画像]: 小画像なし" . $line_separator);
		}
		print("[ アフィリエイトURL ]: " . $items->affiliateUrl . $line_separator);
		print("[ ショップ・アフィリエイトURL ]: " . $items->shopAffiliateUrl . $line_separator);
		print("[ イメージフラグ ]: " . $items->imageFlag . $line_separator);
		print("[ 可溶性 ]: " . $items->availability . $line_separator);
		print("[ 税金フラグ ]: " . $items->taxFlag . $line_separator);
		print("[ ポストエイジフラグ ]: " . $items->postageFlag . $line_separator);
		print("[ クレジットカード・フラグ ]: " .$items->creditCardFlag . $line_separator);
		print("[ ショップオブザイヤー・フラグ ]: " . $items->shopOfTheYearFlag . $line_separator);
		print("[ シップオバーシーズ・フラグ(意味がわかりませんでした。。。) ]: " . $items->shipOverseasFlag . $line_separator);
		print("[ ワールドワイド(意味がわかりませんでした。。。) ]: " . $items->shipOverseasArea . $line_separator);
		print("[ アスラク・フラグ ]: " . $items->asurakuFlag . $line_separator);
		print("[ アスラククウロージング・フラグ ]: " . $items->asurakuClosingTime . $line_separator);
		print("[ アスラクエリア ]: " . $items->asurakuArea . $line_separator);
		print("[ アフィリエイト率 ]: " . $items->affiliateRate . $line_separator);
		print("[ 開始時間 ]: " . $items->startTime . $line_separator);
		print("[ 終了時間 ]: " . $items->endTime . $line_separator);
		print("[ レビューカウント ]: " . $items->reviewCount . $line_separator);
		print("[ ポイント率 ]: " . $items->pointRate . $line_separator);
		print("[ ポイント率開始時間 ]: " . $items->pointRateStartTime . $line_separator);
		print("[ ポイント率終了時間 ]: " . $items->pointRateEndTime . $line_separator);
		print("[ ギフトフラグ ]: " . $items->giftFlag . $line_separator);
		print("[ ショップ名 ]: " . $items->shopName . $line_separator);
		print("[ ショップコード ]: " . $items->shopCode . $line_separator);
		print("[ ??? ]: " . $items->genreId . $line_separator);
		print("[ タグID(複数?) ]: " . $items->tagIds . $line_separator);
		print("[ 終了時間 ]: " . $items->endTime . $line_separator);
		break;
	}

Rakuten API PHP〜楽天SDKを斬る(part2)〜

イントロダクション

前回は、楽天APIを使うために楽天SDKをレンタルサーバー上にアップロード(インストール)しました。

今回は、SDKを使用して1つページを作成しようと思います。

APIの使い方はこちらのページ(楽天のヘルプ)です。

楽天APIの実装

ヘルプを見ると、上の様な画面が見つかります。「アプリ登録」が必要ということで、はやい話がAPIを使用するためのキーを取得します

上の様にアプリ名と起動するPHPファイルのURLを入力します。

上の様な感じで登録が完了します。

レッツPHP

まず初めに、パスの切り方とかどの様になっているかわからないので以下のコードでrakutenAPI.phpを実装します。

<? php
      phpinfo();
?>
<!DOCTYPE html>
<html>
<head>
 <link rel="stylesheet" href="./rakuten.css">
</head>
<body>
</body>
</html>

そして対象のページを開きます。

上の様なヘッダーがあるページが表示されて色々と詳細が書いてあります。「SCRIPT_URL」という項目があるのでそれを見ると現在の起動しているファイルパスが記載されているのでそれを元にルートパスを確認します。

今回自分のところには「/project」から始まるURLが記載されていたのでルートディレクトリはprojectフォルダのあるディレクトリとなります。

そして使用する楽天APIのSDK→ライブラリのあるパスを指定して「autoload.php」を取り込む様にプログラムを書きます。

こちらのページを参考に作成しました。

// エラーを出力する ini_set('display_errors', 1); require_once('../rws-php-sdk-1.1.0/autoload.php'); $client = new RakutenRws_Client(); // アプリID (デベロッパーID) をセットします $client->setApplicationId('1069312965684050347');

//アプリID (デベロッパーID) をセットします
client->setApplicationId('取得したアプリID');

// アフィリエイトID をセットします(任意)
$client->setAffiliateId('取得したアフィリエイトID');

// IchibaItem/Search API から、keyword=うどん を検索します
$response = $client->execute('IchibaItemSearch', array(
  'keyword' => 'AI'
));
// レスポンスが正しいかを isOk() で確認することができます
if ($response->isOk() == false) {
    // 配列アクセスによりレスポンスにアクセスすることができます。
	echo 'Error:'.$response->getMessage();
	return;
}
foreach($response as $items) {
	var_dump($items);
	foreach($items as $cols) {
		break;
	}
	break;
}

取得する項目に関してのドキュメントはこちらでテストフォームよりGETして見ると取得する内容がJSON形式で取得できます。PHPで取得する場合は変数->項目名で取得します。

取得したデータの初めの1レコード分です、ここから表示したい情報を取り出して紹介画面に表示します。

単純に出力したデータ

["itemName"]=> string(256) "さらにクーポン割引 DAKINE ダカイン メンズ スノーボード グローブ ミトン GORE-TEX AI237-718 手ぶくろ ミトングローブ スノボ スノーグローブ 手袋 ゴアテックス スキーグローブ てぶくろ 男性用"

["catchcopy"]=> string(120) "全3色 DAKINE のスノーボード グローブ ミトン GORE-TEX が20%OFF IMPREZA MITT 2019 WINTER【あす楽】"

["itemCode"]=> string(18) "oc-sports:10024681"

["itemPrice"]=> int(7776)

["itemCaption"]=> string(1244) "メーカー希望小売価格はメーカー商品タグに基づいて掲載しています商品詳細素材・仕様DAKINE/ダカイン メンズ グローブ ミトン IMPREZA MITT 2019 WINTER AI237-7182019-DAKINE WINTER COLLECTION透湿性・防水性に優れたGORE-TEXを採用した、高品質なメンズスノーボードグローブ。裏起毛でゲレンデでも寒さからしっかり守ってくれます!手首はベルクロ使用で自分好みの大きさに調整可能!◆素材:ポリエステル65%、ポリウレタン22%、ナイロン13%サイズS:全長22cm×周囲20cm×幅11cm×親指7cmM:全長23.5cm×周囲22cm×幅13cm×親指8cmL:全長24.5cm×周囲25cm×幅14cm×親指9cm※商品によって多少の誤差がございますので、予めご了承ください。注意事項※初期不良以外の返品・交換は固くお断りしております。サイズ・カラー選び等は慎重に行ってください。※掲載商品の色は、できる限り現品と同じになるよう努めておりますが、ご使用のパソコン環境により多少色合いが異なる場合がございます。著しい色の相違は御座いませんのでご安心ください。"

["itemUrl"]=> string(191) "http://hb.afl.rakuten.co.jp/hgc/g00s1ld6.jciuf633.g00s1ld6.jciujad2/?pc=http%3A%2F%2Fitem.rakuten.co.jp%2Foc-sports%2F206040057%2F&m=http%3A%2F%2Fm.rakuten.co.jp%2Foc-sports%2Fi%2F10024681%2F" ["shopUrl"]=> string(163) "http://hb.afl.rakuten.co.jp/hgc/g00s1ld6.jciuf633.g00s1ld6.jciujad2/?pc=http%3A%2F%2Fwww.rakuten.co.jp%2Foc-sports%2F&m=http%3A%2F%2Fm.rakuten.co.jp%2Foc-sports%2F"

["smallImageUrls"]=> array(3) { [0]=> array(1) { ["imageUrl"]=> string(92) "http://thumbnail.image.rakuten.co.jp/@0_mall/oc-sports/cabinet/20618/206040057.jpg?_ex=64x64" } [1]=> array(1) {

["imageUrl"]=> string(94) "http://thumbnail.image.rakuten.co.jp/@0_mall/oc-sports/cabinet/20618/206040057_1.jpg?_ex=64x64" } [2]=> array(1) {

["imageUrl"]=> string(94) "http://thumbnail.image.rakuten.co.jp/@0_mall/oc-sports/cabinet/20618/206040057_2.jpg?_ex=64x64" } } ["mediumImageUrls"]=> array(3) { [0]=> array(1) { ["imageUrl"]=> string(94) "http://thumbnail.image.rakuten.co.jp/@0_mall/oc-sports/cabinet/20618/206040057.jpg?_ex=128x128" } [1]=> array(1) {

["imageUrl"]=> string(96) "http://thumbnail.image.rakuten.co.jp/@0_mall/oc-sports/cabinet/20618/206040057_1.jpg?_ex=128x128" } [2]=> array(1) {

["imageUrl"]=> string(96) "http://thumbnail.image.rakuten.co.jp/@0_mall/oc-sports/cabinet/20618/206040057_2.jpg?_ex=128x128" } } ["affiliateUrl"]=> string(191) "http://hb.afl.rakuten.co.jp/hgc/g00s1ld6.jciuf633.g00s1ld6.jciujad2/?pc=http%3A%2F%2Fitem.rakuten.co.jp%2Foc-sports%2F206040057%2F&m=http%3A%2F%2Fm.rakuten.co.jp%2Foc-sports%2Fi%2F10024681%2F"

["shopAffiliateUrl"]=> string(163) "http://hb.afl.rakuten.co.jp/hgc/g00s1ld6.jciuf633.g00s1ld6.jciujad2/?pc=http%3A%2F%2Fwww.rakuten.co.jp%2Foc-sports%2F&m=http%3A%2F%2Fm.rakuten.co.jp%2Foc-sports%2F"

["imageFlag"]=> int(1) ["availability"]=> int(1) ["taxFlag"]=> int(0)

["postageFlag"]=> int(0) ["creditCardFlag"]=> int(1) ["shopOfTheYearFlag"]=> int(0)

["shipOverseasFlag"]=> int(0)

["shipOverseasArea"]=> string(0) ""

["asurakuFlag"]=> int(1)

["asurakuClosingTime"]=> string(5) "13:00"

["asurakuArea"]=> string(305) "群馬県/埼玉県/千葉県/東京都/神奈川県/新潟県/富山県/石川県/福井県/山梨県/長野県/岐阜県/静岡県/愛知県/三重県/滋賀県/京都府/大阪府/兵庫県/奈良県/和歌山県/鳥取県/島根県/岡山県/広島県/山口県/徳島県/香川県/愛媛県/高知県"

["affiliateRate"]=> int(1)

["startTime"]=> string(0) ""

["endTime"]=> string(0) ""

["reviewCount"]=> int(0)

["reviewAverage"]=> int(0)

["pointRate"]=> int(1)

["pointRateStartTime"]=> string(0) ""

["pointRateEndTime"]=> string(0) ""

["giftFlag"]=> int(0)

["shopName"]=> string(15) "OC SPORTS ANNEX"

["shopCode"]=> string(9) "oc-sports"

["genreId"]=> string(6) "501854"

["tagIds"]=> array(0) { }


Rakuten API PHP〜楽天SDKを切る(part1)〜

イントロダクション

前回、Microbit〜WebServerまでのデータを送信する実装を行なったので。。。ものはついてで、PHPに触れてみようかと思います。

アフィリエイターなどやっている人など「プログラム?」なんて思っている人もやってみてください。簡単にできるところがこういうAPIの魅力です。

楽天APIとは?

世間で「〜API」なんて言葉がたまに聞こえてきますが、早い話が「これを使うと簡単にいろんなことができるよ?」というものです。中には難しいものもありますが。。。

似た様なものでは以下の様なものがあります。

  1. Facebook API
  2. Azure API
  3. Amazon API
  4. Yahoo API
  5. Hatena API
  6. Health planet API

などなど沢山あります。6番目のAPIはヘルスチェック(体組計関連)用のAPIでオムロン、タニタなど大手機器との連携が取れるという品物です。

楽天APIを切る

「切る」と言いましたが、指先や皮一枚を切る程度にします。妖怪でいうところの「カマイタチ」の様な感じでソフトに行こうと思います。

そして、自分は「WordPress」を使用しているのでプラグインを使用しようと思います。ワードプレスにログインしたら左の方に「プラグイン」という文字があると思うのでそれをクリックします。

赤い丸がついている部分がそれです。

そしてプラグイン「新規」でインストールします。

物によってはプラグインをインストールするときに「パスワード」を聞かれると思います。それはレンタルサーバーの「サーバー設定情報」をみて使用するFTPSのサーバー名を記入します。

※ミニムサーバーの場合は上の様な項目名が表示されます。サイトマネージャ→サーバー設定情報でみることができます。

楽天プラグインをインストールしたら?

下の様な楽天マークがブログ投稿ページと左のメニューに表示されます。

 

そして選択すると下の様な画面が表示されて、選択すると下の様なリンク?が挿入されます。


ここまでは、GUIの使い方

PHP実装の準備

ちょっと試したことがないのですが、記事の中にPHPコードが書けると思いますので、ちょっとやってみます。。。がダメでした。ワードプレスのエディタ(自分が使用しているもの)ではPHPのコードは書けませんでした。「<!--?php echo "Testing PGP" ?-->」の様にコメントアウトされてしまいました。

でわどうするか?

PHPファイルを作成します。今回は「rakutenAPI.php」という名前にします。

レンタルサーバーに上の様なファイルを作成します。

  1. ワードプレスの左側にある「外観」にマウスを当てます
  2. そのあと吹き出しの様なものが出るので「テーマの編集」をクリックします
  3. クリックすると下の様なページがあるので「メインインデックスのテンプレート」を選択します

そうするとindex.phpファイルの中身が表示されるのでそれをコピってペってやります。→「index.php」を自分のPC上に作成

一応確認

先ほど選択した「メインインデックスのテンプレート」から「テーマヘッダー」を開きその中から下の様な文を探します

<?php get_template_part( 'template-parts/header/header', 'image' ); ?>

これはパスを指定していて「XXXのファイルを読み込みますよ」という意味です。そして、このファイルの一番初めの部分「template-parts」はルートになるパス(ディレクトリ or フォルダ)の位置を示す重要な手がかりになります。

自分のレンタルサーバー(ミニムサーバー)ではルートになるのが「/web」担っています。なのでそこからワードプレスをインストールした場所を開きます。

インストールした場所には「wp-admin」というフォルダ(ディレクトリ)があるのですぐにわかります。そして今回探しているフォルダは「template-parts」なのでそれを探します。

結論から言うと「テンプレート」を使用するときはルートがテンプレートフォルダになるので「/web/wp/wp-content/themes/twentyseventeen」の様になります。

なので、楽天SDKを使用するにはテンプレートから切り離して使用する方がわかりやすいと思いますので以下の様なフォルダにダウンロードしたSDKをアップロードします。

そして、先ほど作成した「index.php」も同様にアップロードします。

これでSDKを使用する準備が整いました。

Microbit花火〜MicrobitからWebServerまでの旅〜

イントロダクション

マイクロビットで作成したプログラムから全世界にメッセージを送ろう!

実行手順

  1. マイクロビットでPCにシリアル通信でメッセージを送る
  2. PCで受けたメッセージをPythonでWebServerへ飛ばす
  3. ここの画面に表示されることを確認する


マイクロビットのプログラミング方法

Microbitで遊ぶ〜シリアル通信をする〜

シリアル通信の方法

マイクロビットによるシリアル通信プログラムを作成し、接続したUSBで「マイクロビット」→「PC」へマイクロビットで作成したプログラムから文字を送信する。

Micro:bit Python 〜マイクロビット→PCへシリアル通信〜

関連ページ一覧

  1. Microbitで遊ぶ〜ボタンを押す〜
  2. Microbit Python 〜シリアル通信データを受け取る〜
  3. WebSocket in PHP And JS 〜レンタルサーバー上でのWebSocket〜
  4. Python websocket client〜WebSocket送信処理を作る〜