- 投稿日:2020-02-19T23:47:30+09:00
java 挿入ソート
java 挿入ソート
今回は挿入ソートについてコードを書いていく。
※自分のアウトプット用の記事です。間違いなどがあったら指摘してください。InsetionSort.java//トランプの手札の並び替えに似てる気がする。 public class InsertionSort { public static void sort(int[] array) { for(int i=1;i<array.length;i++) { int j=i; while(j>=1 && array[j-1]>array[j]) { int temp = array[j]; array[j] = array[j-1]; array[j-1] = temp; j--; } } } public static void main(String args[]) { int[] array = {3,2,4,5,1}; sort(array); for(int i=0;i<array.length;i++) { System.out.print(array[i]); } } }次回はシェルソートを試してみようと思います。
- 投稿日:2020-02-19T22:03:19+09:00
Java Decompiler project の JD-GUI で JAR ファイルからソースコードを生成する
概要
- Java Decompiler project の JD-GUI で JAR ファイルからソースコードを生成する
- 今回の環境: macOS Catalina + Java 11 (AdoptOpenJDK 11.0.6)
JD-GUI とは
クラスファイルや JAR ファイルから Java のソースコードを生成する逆コンパイラ。
Java 5 以降に導入されたアノテーション、ジェネリクス、列挙型などもサポートしているとのこと。JD-Core is a library that reconstructs Java source code from one or more “.class” files. JD-Core may be used to recover lost source code and explore the source of Java runtime libraries. New features of Java 5, such as annotations, generics or type “enum”, are supported. JD-GUI and JD-Eclipse include JD-Core library.
ダウンロードと実行
公式サイト Java Decompiler から jd-gui-1.6.6.jar をダウンロードする。
$ wget https://github.com/java-decompiler/jd-gui/releases/download/v1.6.6/jd-gui-1.6.6.jarjava コマンドで JD-GUI を起動する。
$ java -jar jd-gui-1.6.6.jarjar ファイルをドラッグ・アンド・ドロップすると Java のソースコードに変換してくれる。
メニューから File → Save All Sources でソースコードをまとめた zip ファイルを生成できる。
生成された zip ファイルを展開してみる。
$ unzip helloworldmod-1.2.3.jar.src.zip Archive: helloworldmod-1.2.3.jar.src.zip creating: META-INF/ inflating: META-INF/MANIFEST.MF inflating: META-INF/mods.toml creating: com/ creating: com/example/ inflating: com/example/HelloWorldMod.java inflating: pack.mcmeta生成されたソースコードには jar ファイルのあったパスなどがコメントで埋め込まれている。
$ cat com/example/HelloWorldMod.java /* */ package com.example; /* */ /* */ import net.minecraft.entity.player.PlayerEntity; /* */ import net.minecraft.util.math.BlockPos; /* */ import net.minecraft.util.text.ITextComponent; /* */ import net.minecraft.util.text.StringTextComponent; /* */ import net.minecraftforge.common.MinecraftForge; /* */ import net.minecraftforge.event.entity.player.PlayerEvent; /* */ import net.minecraftforge.eventbus.api.SubscribeEvent; /* */ import net.minecraftforge.fml.common.Mod; /* */ /* */ /* */ @Mod("helloworldmod") /* */ public class HelloWorldMod /* */ { /* */ public HelloWorldMod() { /* 17 */ MinecraftForge.EVENT_BUS.register(this); /* */ } /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ @SubscribeEvent /* */ public void onPlayerLoggedIn(PlayerEvent.PlayerLoggedInEvent event) { /* 28 */ PlayerEntity player = event.getPlayer(); /* 29 */ BlockPos pos = player.func_180425_c(); /* */ /* */ /* */ /* 33 */ String message = "Hello, World!\n[name]=[" + player.func_200200_C_().func_150254_d() + "]\n[pos]=[" + pos.func_177958_n() + "," + pos.func_177956_o() + "," + pos.func_177952_p() + "]"; /* 34 */ StringTextComponent stringTextComponent = new StringTextComponent(message); /* 35 */ player.func_145747_a((ITextComponent)stringTextComponent); /* */ } /* */ } /* Location: /Users/johndoe/hello/build/libs/helloworldmod-1.2.3.jar!/com/example/HelloWorldMod.class * Java compiler version: 8 (52.0) * JD-Core Version: 1.1.3 */参考資料
- 投稿日:2020-02-19T21:13:22+09:00
TrelloにJaveからAPIを使ってカードの起票や取得をしてみる
みんな大好きのタスク管理ツールTrelloは、ユーザインタフェースが使いやすく、見てすぐ使いこなせます。
そのTrelloと自分の作っているサービスを連携するためにTrello APIを簡単に使えないかを調べたのでまとめてみました。
1.準備
APIを発行するには、IDやパスワードの代わりになるキーとトークンの取得が必要です。
これらをまず取得します。Trelloにログインします。
https://trello.com/app-keyにアクセスします。すると、キーが表示されますので、これをメモします。
その後、「トークン」をクリックして、下記のような画面が表示されるので、「許可」をクリックします。
下記のようにトークンが表示されますので、これをメモっておきます。
このキーとトークンを使い、APIを発行してTrelloにカード起票などを行ないます。
2.Javaのラッパーのライブラリを利用する
Githubにtrello-java-wrapperというライブラリがあるので、そちらを利用します。
GithubのページにはGradleで記載されていますが、Mavenにもありますので、こちらを利用します。
<!-- https://mvnrepository.com/artifact/com.taskadapter/trello-java-wrapper --> <dependency> <groupId>com.taskadapter</groupId> <artifactId>trello-java-wrapper</artifactId> <version>0.13</version> </dependency>まず、TrelloImplのインスタンスを作成します。この例では、Apache Httpライブラリに基づいたhttpクライアントを使用しています。
Trello trelloApi = new TrelloImpl(trelloKey, trelloAccessToken, new ApacheHttpClient());
- trelloKey:Trelloで認証されたユーザーのoauthトークン。
- trelloAccessToken:Trelloで認証されたユーザーのoauthトークン。
- ApacheHttpClient:サポートされているhttpクライアントの1つ。 ※com.julienvey.trello.impl.httpのパッケージを参照してください。
ちなみに以下のようなエラーが発生する場合は、
Exception in thread "main" java.lang.NoClassDefFoundError: com/fasterxml/jackson/core/exc/InputCoercionExceptionMavenで「com.fasterxml.jackson.core」を追加すると直るかと思います。
<!-- https://mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson-core --> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-core</artifactId> <version>2.10.2</version> </dependency>3.ボードの一覧を取得する
まずは、ボードの一覧取得はこうなります。
メンバーIDの指定を"me"と記載すると自分自身のボードがすべて取得できます。List <Board> boards = trelloApi.getMemberBoards("me", new Argument("fields", "name"));パラメータに以下を指定しているのは、ボード名が取得できないので、指定する必要があります。
new Argument("fields", "name")4.リストとカードの一覧を取得する
こちらがボード内のリストを取得する方法になります。
List <TList> lists = trelloApi.getBoardLists(boardId);
- boardId:取得したボードIDを指定。
こちらがリスト内のカードを取得する方法になります。
List <Card> cards = trelloApi.getListCards(listId);
- listId:取得したリストIDを指定。
ちなみにこんな感じでコーディングするとすべてのカードが取得できたりします。
List <Board> boards = trelloApi.getMemberBoards("me", new Argument("fields", "name")); for (Board board : boards) { board.getName(); board.getId(); System.out.println(board.getId() + ":" + board.getName()); List <TList> lists = trelloApi.getBoardLists(board.getId()); for (TList list : lists) { System.out.println(list.getId() + ":" + list.getName()); List <Card> cards = trelloApi.getListCards(list.getId()); for (Card card : cards) { System.out.println(card.getId() + ":" + card.getName()); } } }5.カードを起票する
カードを起票する場合はこのように記載します。
Card card = new Card(); card.setName("あいうえお"); card = trelloApi.createCard(listId, card); // 登録 card.addComment("コメントを記載"); card = card.update(); // 更新 card.delete(); // 削除
- listId:取得したリストIDを指定。
新規でカードを登録する場合はcreateCardでカードを作成して、更新する場合はupdate、削除の場合はdeleteを指定します。
6.終わりに
trello-java-wrapperには、一通りのAPIの呼び出しに対応していますので、簡単にJavaからTrelloのAPIを呼び出すことができます。
もし、Trelloをお使いでしたら試してみてはいかがでしょうか。以下、参考サイト
https://became-free.com/how-to-use-trello-api/
http://blog.serverworks.co.jp/tech/2016/05/16/trello-api/
- 投稿日:2020-02-19T17:47:55+09:00
Cosmos DBに大量にデータを入れてみる
ちょっとした検証目的のため、Cosmos DBに大量データを投じる簡易的なサンプルJavaコードを作成してみました。
当然ながら大量のトランザクションが走ると課金額も増加するため、ご利用は自己責任にてお願いします。https://github.com/yahanda/cosmosdb-testdata-generator
使用方法
1) ニューヨーク市の Taxi and Limousine Commission のページより、Yellowタクシーの乗降データをダウンロードし、任意のフォルダーに配置します。(例:
C:\\Temp\\
)
2) Eclipseでpom.xml
をロードし、Javaパースペクティブを開きます。
3)appsettings.properties
を開き、以下のプロパティー値をご自身のCosmos DB環境にあわせて更新します。CsvFileDir
には、手順 1) で CSVファイルを配置したフォルダーを指定します。EndPointUrl=https://REPLACE_ME_WITH_YOURS.documents.azure.com:443/ PrimaryKey=REPLACE_ME_WITH_YOURS Database=TestDB Collection=TestCollection CsvFileDir=C:\\Temp\\4)
GenerateNYCTaxiData.java
をJava Applicationとして実行します。実行例Created a new database: {"_rid":"DewXAA==","id":"TestDB","_self":"dbs/DewXAA==/","_colls":"colls/","_users":"users/","_etag":"\"00002908-0000-2300-0000-5e4cf35e0000\"","_ts":1582101343} Press any key to continue.. Created a new collection: {"uniqueKeyPolicy":{"uniqueKeys":[]},"geospatialConfig":{"type":"Geography"},"_rid":"DewXAIlOilc=","_sprocs":"sprocs/","_triggers":"triggers/","_udfs":"udfs/","conflictResolutionPolicy":{"mode":"LastWriterWins","conflictResolutionProcedure":"","conflictResolutionPath":"/_ts"},"_docs":"docs/","partitionKey":{"paths":["/_partitionKey"],"kind":"Hash"},"indexingPolicy":{"indexingMode":"consistent","automatic":true,"includedPaths":[{"path":"/*"}],"excludedPaths":[{"path":"/\"_etag\"/?"}]},"id":"TestCollection","_self":"dbs/DewXAA==/colls/DewXAIlOilc=/","_conflicts":"conflicts/","_etag":"\"00001f05-0000-2300-0000-5e4cf3620000\"","_ts":1582101346} Press any key to continue.. Read a csv file: C:\Temp\yellow_tripdata_2019-01.csv Press any key to continue.. Header: VendorID,tpep_pickup_datetime,tpep_dropoff_datetime,passenger_count,trip_distance,RatecodeID,store_and_fwd_flag,PULocationID,DOLocationID,payment_type,fare_amount,extra,mta_tax,tip_amount,tolls_amount,improvement_surcharge,total_amount,congestion_surcharge Created 1 document: {"_rid":"DewXAIlOilcBAAAAAAAAAA==","puLocationid":"151","fare_amount":"7","tpep_dropoff_datetime":"2019-01-01 00:53:20","congestion_surcharge":"","vendorid":"1","passenger_count":"1","tolls_amount":"0","improvement_surcharge":"0.3","trip_distance":"1.50","_attachments":"attachments/","store_and_fwd_flag":"N","payment_type":"1","ratecodeid":"1","total_amount":"9.95","extra":"0.5","tip_amount":"1.65","mta_tax":"0.5","id":"92ce47d1-b876-443e-8e47-d1b876643e4a","_self":"dbs/DewXAA==/colls/DewXAIlOilc=/docs/DewXAIlOilcBAAAAAAAAAA==/","doLocationid":"239","tpep_pickup_datetime":"2019-01-01 00:46:40","_etag":"\"00003108-0000-2300-0000-5e4cf3660000\"","_ts":1582101350} Created 2 document: {"_rid":"DewXAIlOilcCAAAAAAAAAA==","puLocationid":"239","fare_amount":"14","tpep_dropoff_datetime":"2019-01-01 01:18:59","congestion_surcharge":"","vendorid":"1","passenger_count":"1","tolls_amount":"0","improvement_surcharge":"0.3","trip_distance":"2.60","_attachments":"attachments/","store_and_fwd_flag":"N","payment_type":"1","ratecodeid":"1","total_amount":"16.3","extra":"0.5","tip_amount":"1","mta_tax":"0.5","id":"14a612b4-4eac-4aa3-a612-b44eacdaa3b6","_self":"dbs/DewXAA==/colls/DewXAIlOilc=/docs/DewXAIlOilcCAAAAAAAAAA==/","doLocationid":"246","tpep_pickup_datetime":"2019-01-01 00:59:47","_etag":"\"00003208-0000-2300-0000-5e4cf3660000\"","_ts":1582101350} Created 3 document: {"_rid":"DewXAIlOilcDAAAAAAAAAA==","puLocationid":"236","fare_amount":"4.5","tpep_dropoff_datetime":"2018-12-21 13:52:40","congestion_surcharge":"","vendorid":"2","passenger_count":"3","tolls_amount":"0","improvement_surcharge":"0.3","trip_distance":".00","_attachments":"attachments/","store_and_fwd_flag":"N","payment_type":"1","ratecodeid":"1","total_amount":"5.8","extra":"0.5","tip_amount":"0","mta_tax":"0.5","id":"69d7e305-53e1-4efd-97e3-0553e18efd36","_self":"dbs/DewXAA==/colls/DewXAIlOilc=/docs/DewXAIlOilcDAAAAAAAAAA==/","doLocationid":"236","tpep_pickup_datetime":"2018-12-21 13:48:30","_etag":"\"00003308-0000-2300-0000-5e4cf3660000\"","_ts":1582101350} Created 4 document: {"_rid":"DewXAIlOilcEAAAAAAAAAA==","puLocationid":"193","fare_amount":"3.5","tpep_dropoff_datetime":"2018-11-28 15:55:45","congestion_surcharge":"","vendorid":"2","passenger_count":"5","tolls_amount":"0","improvement_surcharge":"0.3","trip_distance":".00","_attachments":"attachments/","store_and_fwd_flag":"N","payment_type":"2","ratecodeid":"1","total_amount":"7.55","extra":"0.5","tip_amount":"0","mta_tax":"0.5","id":"3cb3e88a-da63-4060-b3e8-8ada63d060b3","_self":"dbs/DewXAA==/colls/DewXAIlOilc=/docs/DewXAIlOilcEAAAAAAAAAA==/","doLocationid":"193","tpep_pickup_datetime":"2018-11-28 15:52:25","_etag":"\"00003408-0000-2300-0000-5e4cf3660000\"","_ts":1582101350} Created 5 document: {"_rid":"DewXAIlOilcFAAAAAAAAAA==","puLocationid":"193","fare_amount":"52","tpep_dropoff_datetime":"2018-11-28 15:58:33","congestion_surcharge":"","vendorid":"2","passenger_count":"5","tolls_amount":"0","improvement_surcharge":"0.3","trip_distance":".00","_attachments":"attachments/","store_and_fwd_flag":"N","payment_type":"2","ratecodeid":"2","total_amount":"55.55","extra":"0","tip_amount":"0","mta_tax":"0.5","id":"ff1002e6-03f5-4bac-9002-e603f5cbacf5","_self":"dbs/DewXAA==/colls/DewXAIlOilc=/docs/DewXAIlOilcFAAAAAAAAAA==/","doLocationid":"193","tpep_pickup_datetime":"2018-11-28 15:56:57","_etag":"\"00003508-0000-2300-0000-5e4cf3660000\"","_ts":1582101350} Created 6 document: {"_rid":"DewXAIlOilcGAAAAAAAAAA==","puLocationid":"193","fare_amount":"3.5","tpep_dropoff_datetime":"2018-11-28 16:28:26","congestion_surcharge":"","vendorid":"2","passenger_count":"5","tolls_amount":"5.76","improvement_surcharge":"0.3","trip_distance":".00","_attachments":"attachments/","store_and_fwd_flag":"N","payment_type":"2","ratecodeid":"1","total_amount":"13.31","extra":"0.5","tip_amount":"0","mta_tax":"0.5","id":"3cf17f8b-617e-49a4-b17f-8b617e29a49c","_self":"dbs/DewXAA==/colls/DewXAIlOilc=/docs/DewXAIlOilcGAAAAAAAAAA==/","doLocationid":"193","tpep_pickup_datetime":"2018-11-28 16:25:49","_etag":"\"00003608-0000-2300-0000-5e4cf3660000\"","_ts":1582101350} Created 7 document: :参考情報
- 投稿日:2020-02-19T00:23:28+09:00
Amazon Product Advertising API 5.0 (PA-API v5) の SDK (paapi5-java-sdk-1.0.0) を使う
概要
- Java から Amazon Product Advertising API 5.0 (PA-API v5) を使用する
- API を直接コールせず AWS が提供している公式の SDK (paapi5-java-sdk-1.0.0) を使用する
- 今回の実行環境: macOS Catalina + Java 8 + Gradle 6.1
paapi5-java-sdk-1.0.0 のダウンロード
paapi5-java-sdk-1.0.0 は Maven Central Repository などで配布されていないため、 jar ファイルをダウンロードして使う。
Using SDK · Product Advertising API 5.0 から paapi5-java-sdk-example.zip をダウンロードして展開する。
sdk ディレクトリには paapi5-java-sdk-1.0.0 を使用するサンプルコードが入っている。
$ ls ./sdk/ | sort Callback.java ConnectionPoolSampleRequest.java GetBrowseNodes.java GetBrowseNodesAsync.java GetBrowseNodesWithHttpInfo.java GetItems.java GetItemsAsync.java GetItemsWithHttpInfo.java GetVariations.java GetVariationsAsync.java GetVariationsWithHttpInfo.java SearchItems.java SearchItemsAsync.java SearchItemsWithHttpInfo.javadependencies ディレクトリには SDK である paapi5-java-sdk-1.0.0.jar とその依存ライブラリの jar ファイルが入っている。
$ ls ./dependencies/ | sort commons-codec-1.11.jar commons-logging-1.2.jar gson-2.8.1.jar gson-fire-1.8.0.jar hamcrest-core-1.3.jar httpclient-4.5.5.jar httpcore-4.4.9.jar jackson-annotations-2.9.0.jar jackson-core-2.9.5.jar jackson-core-asl-1.9.2.jar jackson-databind-2.9.3.jar jackson-mapper-asl-1.9.2.jar jackson-xc-1.9.2.jar jackson-xml-databind-0.6.2.jar json-20180130.jar junit-4.12.jar logging-interceptor-2.7.5.jar okhttp-2.7.5.jar okio-1.6.0.jar paapi5-java-sdk-1.0.0.jar stax-api-1.0-2.jar stax2-api-3.1.0.jar swagger-annotations-1.5.15.jar threetenbp-1.3.5.jarpaapi5-java-sdk-1.0.0.jar ファイルを展開して pom.xml を見ると依存情報が載っているので、依存ライブラリについての設定はこれを参考にする。
以下に META-INF/maven/com.amazon.paapi5/paapi5-java-sdk/pom.xml より依存情報を一部抜粋する。
<dependencies> <dependency> <groupId>io.swagger</groupId> <artifactId>swagger-annotations</artifactId> <version>${swagger-core-version}</version> </dependency> <dependency> <groupId>com.squareup.okhttp</groupId> <artifactId>okhttp</artifactId> <version>${okhttp-version}</version> </dependency> <dependency>paapi5-java-sdk-1.0.0 を使うサンプルコード
ファイル一覧
今回はダウンロードした paapi5-java-sdk-1.0.0.jar を libs ディレクトリ以下に置く。
├── build.gradle ├── libs │ └── paapi5-java-sdk-1.0.0.jar ├── settings.gradle └── src └── main └── java └── com └── example └── App.javabuild.gradle
Gradle の設定ファイル。
plugins { id 'java' id 'application' } repositories { mavenCentral() } dependencies { // ダウンロードした paapi5-java-sdk implementation files('libs/paapi5-java-sdk-1.0.0.jar') // paapi5-java-sdk が依存しているライブラリ (paapi5-java-sdk-1.0.0.jar の pom.xml を参考にした) implementation 'io.swagger:swagger-annotations:1.5.15' implementation 'com.squareup.okhttp:okhttp:2.7.5' implementation 'com.squareup.okhttp:logging-interceptor:2.7.5' implementation 'com.google.code.gson:gson:2.8.1' implementation 'io.gsonfire:gson-fire:1.8.0' implementation 'org.threeten:threetenbp:1.3.5' } application { mainClassName = 'com.example.App' } sourceCompatibility = targetCompatibility = '1.8'settings.gradle
Gradle の設定ファイル。
rootProject.name = 'hello-amazon-pa-api-world'App.java
paapi5-java-sdk-1.0.0 を使うサンプルプログラム。
package com.example; import com.amazon.paapi5.v1.ApiClient; import com.amazon.paapi5.v1.ApiException; import com.amazon.paapi5.v1.ByLineInfo; import com.amazon.paapi5.v1.Contributor; import com.amazon.paapi5.v1.ErrorData; import com.amazon.paapi5.v1.GetItemsRequest; import com.amazon.paapi5.v1.GetItemsResource; import com.amazon.paapi5.v1.GetItemsResponse; import com.amazon.paapi5.v1.Item; import com.amazon.paapi5.v1.PartnerType; import com.amazon.paapi5.v1.SearchItemsRequest; import com.amazon.paapi5.v1.SearchItemsResource; import com.amazon.paapi5.v1.SearchItemsResponse; import com.amazon.paapi5.v1.api.DefaultApi; import java.util.ArrayList; import java.util.List; public class App { public static void main(String[] args) { ApiClient client = new ApiClient(); client.setAwsAccessKey("<YOUR-ACCESS-KEY-HERE>"); // 取得したアクセスキー client.setAwsSecretKey("<YOUR-SECRET-KEY-HERE>"); // 取得したシークレットキー client.setHost("webservices.amazon.co.jp"); // Amazon.co.jp の Web API ホスト client.setRegion("us-west-2"); // Amazon.co.jp では us-west-2 を指定 String trackingId = "<YOUR-PARTNER-TAG-HERE>"; // 取得したトラッキングID // キーワードから商品を検索 System.out.println("===== searchItems ================================"); String keywords = "シェイクスピア"; searchItems(client, trackingId, keywords); // ASIN から商品情報を取得 System.out.println("===== getItems ==================================="); List<String> itemIds = new ArrayList<>(); itemIds.add("4391641585"); itemIds.add("B010EB1HR4"); itemIds.add("B0125SPF90"); itemIds.add("B07V52KSGT"); getItems(client, trackingId, itemIds); } // キーワードから商品を検索 public static void searchItems(ApiClient client, String trackingId, String keywords) { // レスポンスに含む値のタイプを指定 // https://webservices.amazon.com/paapi5/documentation/search-items.html#resources-parameter List<SearchItemsResource> searchItemsResources = new ArrayList<SearchItemsResource>(); searchItemsResources.add(SearchItemsResource.ITEMINFO_TITLE); searchItemsResources.add(SearchItemsResource.ITEMINFO_PRODUCTINFO); searchItemsResources.add(SearchItemsResource.IMAGES_PRIMARY_MEDIUM); searchItemsResources.add(SearchItemsResource.OFFERS_LISTINGS_PRICE); // リクエスト情報を組み立てる SearchItemsRequest req = new SearchItemsRequest() .itemCount(5) // 検索結果の数 .partnerTag(trackingId) // トラッキングID .keywords(keywords) // 検索キーワード .searchIndex("All") // 検索カテゴリー (AmazonVideo, Books, Hobbies, Music などを指定可能) .resources(searchItemsResources) // レスポンスに含む値のタイプ .partnerType(PartnerType.ASSOCIATES); try { // 検索を実行 DefaultApi api = new DefaultApi(client); SearchItemsResponse res = api.searchItems(req); // 結果を取得 if (res.getSearchResult() != null) { for (Item item : res.getSearchResult().getItems()) { System.out.println("--------------------------------------------------"); // タイトル, ASIN, 商品URL System.out.println("Title: " + item.getItemInfo().getTitle().getDisplayValue()); System.out.println("ASIN: " + item.getASIN()); System.out.println("DetailPageURL: " + item.getDetailPageURL()); // アダルト商品かどうか System.out.println("IsAdultProduct: " + item.getItemInfo().getProductInfo().getIsAdultProduct().isDisplayValue()); // 画像URL System.out.println("ImageURL: " + item.getImages().getPrimary().getMedium().getURL()); // 価格 if (item.getOffers() != null && item.getOffers().getListings() != null && item.getOffers().getListings().get(0).getPrice() != null && item.getOffers().getListings().get(0).getPrice().getDisplayAmount() != null) { System.out.println("Price: " + item.getOffers().getListings().get(0).getPrice().getDisplayAmount()); } } } // エラー処理 if (res.getErrors() != null) { for (ErrorData error : res.getErrors()) { System.out.println("Error code: " + error.getCode()); System.out.println("Error message: " + error.getMessage()); } } } catch (ApiException e) { // エラー処理 e.printStackTrace(); System.out.println("Status code: " + e.getCode()); System.out.println("Errors: " + e.getResponseBody()); System.out.println("Message: " + e.getMessage()); if (e.getResponseHeaders() != null) { System.out.println("Request ID: " + e.getResponseHeaders().get("x-amzn-RequestId")); } } catch (Exception e) { // エラー処理 e.printStackTrace(); } } // ASIN から商品情報を取得 public static void getItems(ApiClient client, String trackingId, List<String> asinList) { // レスポンスに含む値のタイプを指定 // https://webservices.amazon.com/paapi5/documentation/get-items.html#resources-parameter List<GetItemsResource> getItemsResources = new ArrayList<GetItemsResource>(); getItemsResources.add(GetItemsResource.ITEMINFO_TITLE); getItemsResources.add(GetItemsResource.ITEMINFO_BYLINEINFO); // リクエスト情報を組み立てる GetItemsRequest req = new GetItemsRequest() .itemIds(asinList) // ASIN のリスト .partnerTag(trackingId) // トラッキングID .resources(getItemsResources) // レスポンスに含む値のタイプ .partnerType(PartnerType.ASSOCIATES); try { // 検索を実行 DefaultApi api = new DefaultApi(client); GetItemsResponse res = api.getItems(req); // 結果を取得 if (res.getItemsResult() != null) { for (Item item : res.getItemsResult().getItems()) { System.out.println("--------------------------------------------------"); // タイトル, ASIN, 商品URL System.out.println("Title: " + item.getItemInfo().getTitle().getDisplayValue()); System.out.println("ASIN: " + item.getASIN()); System.out.println("DetailPageURL: " + item.getDetailPageURL()); // 著者などの貢献者情報 ByLineInfo bi = item.getItemInfo().getByLineInfo(); if (bi != null && bi.getContributors() != null) { for (Contributor c : bi.getContributors()) { System.out.println("Contributor: " + c.getRole() + ": " + c.getName()); } } } } // エラー処理 if (res.getErrors() != null) { for (ErrorData error : res.getErrors()) { System.out.println("Error code: " + error.getCode()); System.out.println("Error message: " + error.getMessage()); } } } catch (ApiException e) { // エラー処理 e.printStackTrace(); System.out.println("Status code: " + e.getCode()); System.out.println("Errors: " + e.getResponseBody()); System.out.println("Message: " + e.getMessage()); if (e.getResponseHeaders() != null) { System.out.println("Request ID: " + e.getResponseHeaders().get("x-amzn-RequestId")); } } catch (Exception e) { // エラー処理 e.printStackTrace(); } } }サンプルコードの実行結果
実行環境: macOS Catalina + Gradle 6.1 + Java 8 (AdoptOpenJDK 1.8.0_242-b08)
$ gradle run > Task :run ===== searchItems ================================ -------------------------------------------------- Title: 7人のシェイクスピア NON SANZ DROICT(11) (ヤングマガジンコミックス) ASIN: B084BP9ZD9 DetailPageURL: https://www.amazon.co.jp/dp/B084BP9ZD9?tag=<YOUR-PARTNER-TAG-HERE>&linkCode=osi&th=1&psc=1 IsAdultProduct: false ImageURL: https://m.media-amazon.com/images/I/51KrT7qGuOL._SL160_.jpg Price: ¥660 -------------------------------------------------- Title: シェイクスピア全集 (1) ハムレット (ちくま文庫) ASIN: 4480033017 DetailPageURL: https://www.amazon.co.jp/dp/4480033017?tag=<YOUR-PARTNER-TAG-HERE>&linkCode=osi&th=1&psc=1 IsAdultProduct: false ImageURL: https://m.media-amazon.com/images/I/51RZYRYGQ8L._SL160_.jpg Price: ¥726 -------------------------------------------------- Title: ハムレット(字幕版) ASIN: B015BY1Q6Q DetailPageURL: https://www.amazon.co.jp/dp/B015BY1Q6Q?tag=<YOUR-PARTNER-TAG-HERE>&linkCode=osi&th=1&psc=1 IsAdultProduct: false ImageURL: https://m.media-amazon.com/images/I/516XD+o35gL._SL160_.jpg Price: ¥400 -------------------------------------------------- Title: あらすじで読むシェイクスピア全作品 (祥伝社新書) ASIN: B06ZZH149Y DetailPageURL: https://www.amazon.co.jp/dp/B06ZZH149Y?tag=<YOUR-PARTNER-TAG-HERE>&linkCode=osi&th=1&psc=1 IsAdultProduct: false ImageURL: https://m.media-amazon.com/images/I/41Ms+C0NwNL._SL160_.jpg Price: ¥836 -------------------------------------------------- Title: 第8話 ASIN: B07WPX7D76 DetailPageURL: https://www.amazon.co.jp/dp/B07WPX7D76?tag=<YOUR-PARTNER-TAG-HERE>&linkCode=osi&th=1&psc=1 IsAdultProduct: false ImageURL: https://m.media-amazon.com/images/I/517ol4X4BwL._SL160_.jpg ===== getItems =================================== -------------------------------------------------- Title: すみっコぐらし検定公式ガイドブック すみっコぐらし大図鑑 (生活シリーズ) ASIN: 4391641585 DetailPageURL: https://www.amazon.co.jp/dp/4391641585?tag=<YOUR-PARTNER-TAG-HERE>&linkCode=ogi&th=1&psc=1 Contributor: 監修: サンエックス Contributor: 編集: 主婦と生活社 -------------------------------------------------- Title: 守護神伝 第二章 <エクスパンデッド・エディション>(リマスター) ASIN: B010EB1HR4 DetailPageURL: https://www.amazon.co.jp/dp/B010EB1HR4?tag=<YOUR-PARTNER-TAG-HERE>&linkCode=ogi&th=1&psc=1 Contributor: アーティスト: ハロウィン -------------------------------------------------- Title: ハロウィン ロッキング パンプキン ホームデコレーション用小物 H 130cm ASIN: B0125SPF90 DetailPageURL: https://www.amazon.co.jp/dp/B0125SPF90?tag=<YOUR-PARTNER-TAG-HERE>&linkCode=ogi&th=1&psc=1 -------------------------------------------------- Title: ハロウィン (字幕版) ASIN: B07V52KSGT DetailPageURL: https://www.amazon.co.jp/dp/B07V52KSGT?tag=<YOUR-PARTNER-TAG-HERE>&linkCode=ogi&th=1&psc=1 Contributor: 出演: ジェイミー・リー・カーティス Contributor: 出演: ジュディ・グリア Contributor: 出演: アンディ・マティチャック Contributor: 出演: ウィル・パットン Contributor: 出演: ヴァージニア・ガードナー Contributor: 出演: ニック・キャッスル Contributor: 出演: ジェームス・ジュード・コートニー Contributor: 出演: ハルク・ビルギナー Contributor: 出演: リアン・リース Contributor: 出演: ジェファーソン・ホール Contributor: 監督: デヴィッド・ゴードン・グリーン Contributor: Writer: デヴィッド・ゴードン・グリーン Contributor: Writer: ジェフ・フラッドリー Contributor: Writer: ダニー・マクブライド Contributor: プロデュース: マレク・アカッド Contributor: プロデュース: ジェイソン・ブラム Contributor: プロデュース: ビル・ブロック BUILD SUCCESSFUL in 3s 2 actionable tasks: 2 executed参考資料