プログラミング

ちょっと大人のプログラミング。GASをおぼえよう

さてさてやってまいりました。御子柴ちゃんがおくるプログラミングシリーズ。

Google App Script(GAS)がやたら便利なのでこれをぜひ覚えてもらいたい。せっかくなので少し大人な感じにしてきたいとおもっています。

今日の講義を最後までやってもらえれば、なんとむふふな題材を使いながら

1, WEB APIの概念
2, Google App Scriptの使い方
3, 素敵な眺めを簡単に手に入れる

の3つのスキルがつくという盛りだくさんの講座です。ちょっと難しめなので何らかのプログラミングをしたことある方が対象です。初めてプログラムされる方には少し敷居が高いことをご了承ください。

では早速意識高いプログラマたちを魅惑の世界へ連れていきましょう。

DMM APIとは

動画配信で有名なDMMですがこの動画などのタイトルはなんとWEB API にて取得することが可能です。

WEP APIとは http経由でコマンドを送信すると必要な情報を定型の形式で返してくれる近年多くのサービスで設定されているサービスです。これができると情報取得が楽になります。

Google App Scriptとは

GASとよく略されます。これはGoogle Document や Google Spreadsheetに付随するスクリプト機能。エクセルのVBAみたいなものですね。それがオンラインの Googleのサービスと連携して使えるのです。

ただのエクセルのマクロとは違いさすがgoogle WEBアプリの発行まで簡単にできてしまいます。今日の講座ではWEBアプリまではいきませんがこの講座の人気が出たら続編ではWEBアプリの発行まで紹介していきましょう。

今日のプログラミングの目標

今日はGASでビデオのリストをスプレッドシートに書き込むところまでやっていきましょう。下記のようなエッチなリストを作成するところまでもっていきます。

データまでとってしまえば後は自由です。続編でもう少しいろいろ手をいれていきましょう。今日はみなさんにGASのAPIプログラミングに慣れてもらうことを目的にしていきます。

 

では、始めます

DMM側の準備

アフィリエイトIDの取得

DMMのAPIを使うにはまずDMMのアフィリエイトのアカウントが必要になります。DMMのアカウントを持っていない人は取得をお願いします。

アカウント取得はこちらから

DMMは大人のサービスがメインで始まりましたが、英会話や携帯電話など幅広く事業を展開しています。DMMのアフィリエイトでの登録で問題になることは少ないだろうとおもってます。(でも不安ならやめときましょう。)

DMM自体のIDはすぐに取得できると思います。ただアリフィリエイトのアカウントは人間が間に入っていると思われますので少し時間かかります。僕の場合は次の日に許可の連絡がきました。早い方だと思います。

APIキーの取得

アフィリエイトのアカウントが取得できるとAPIのキーの取得の権利が手に入ります。このAPIキーがあって初めてDMMのAPIがたたけるようになります。

こちらから取得してください

これでDMM側の準備が整いました。

プログラムに入る前にちゃんと動作するか動作確認してみましょう。下記のページに商品を抽出するAPIが記載されています。こちらを使って、ブラウザにて動作確認をします。

https://affiliate.dmm.com/api/v3/itemlist.html

下記の文字列をエディターで作成してください。アフィリエイトのIDとAPIのIDを埋め込む必要があります。アフィリエイトIDの末尾に3桁の数字があります。ここは990としてください。

https://api.dmm.com/affiliate/v3/ItemList?api_id=[APIID]&affiliate_id=[アフィリエイトID]&site=FANZA&service=digital&floor=videoa&output=json

細かくパラメータを設定できますが今回は設定少なめにしておきます。動作確認が目的です。

作成した文字列をブラウザのサイトアドレス入力部に入れエンターを押した結果、画面いっぱいの結果が出てきたら成功です。

Google App Scriptを使う

Google APp Scriptを使うために必要なのはGoogleのIDだけです。これはみなさん持っているとおもいますので説明は割愛します。GoogleのIDはいくつも作れますので必要に応じて、ネット活動用のIDを作ってもいいかもしれません。僕は個人用とネット遊び用の2つを持っています。

今回はスプレッドシートベースで開発をしてみましょう。

スプレッドシートの作成

Googleスプレッドシートのページにいってください。(Googleは入り口がいくつもあるのでGoogle Driveで新しいスプレッドシートの作成でも同じことが可能です)

新しいスプレッドシートを作成しましょう。空白と明記されている大きなボタンを押してください。

ここで新しいシート作成されました。このとき作成されたシートのアドレスの末尾の文字列をメモしておいてください。実際にはxxxxxxxxxxではなく乱数ぽい文字列になっています。

 

https://docs.google.com/spreadsheets/d/xxxxxxxxxxxxxxxxxxxxxxxxxxxx/edit#gid=0

 

スクリプトエディターの作成

早速取り掛かりましょう。ツール→スクリプトエディターを開いてください

開くとエディターが開きます。空の関数がありますね。

スクリプトの貼り付け

さて、ではGAP(Google App Script)を使って早速DMMから情報を取得しましょう。一気に行きます。下記のコードをエディターに貼り付けてください。

 

function dmmVideoList() {

var dmmAffId = “アフィリエイトIDを入れる末尾を990にする“;
var dmmApiId = “apiキーを入れる“;
var dmmApiCommand = “https://api.dmm.com/affiliate/v3/ItemList?”;
var sheetidx = “スプレッドシートのURLの文字列“; //データ保存用google Spreadsheet
var mySpread = SpreadsheetApp.openById(sheetidx);   //ブックハンドラの取得
var mySheets = mySpread.getSheetByName(“シート1”);     //シートハンドラの取得

//シートの初期化
mySheets.clear();

//コマンドのカスタマイズ
dmmApiCommand = dmmApiCommand + “api_id=” + dmmApiId + “&affiliate_id=” + dmmAffId + “&site=FANZA&service=digital&floor=videoa&output=json”;
Logger.log(dmmApiCommand);//デバック用出力

//APIコマンドの送信
var results = JSON.parse(UrlFetchApp.fetch(dmmApiCommand).getContentText()); //取得&JSON文字列解析

// スプレッドシートへの記入
for (var i = 0; i < results[‘result’][‘result_count’]; i++) {
str = mySheets.getRange(i + 1, 1).setValue(i + 1);
str = mySheets.getRange(i + 1, 2).setValue(results[‘result’][‘items’][i][‘title’]);
str = mySheets.getRange(i + 1, 3).setValue(results[‘result’][‘items’][i][‘URL’] + dmmAffId);
}

}

保存ボタンを押して保存します。(フロッピーのマーク)

実行してみる

では実行してみましょう。三角の再生ボタンを押して実行してください。

エラーが出ずに終了したらスプレッドシートにいってみてください。こんなリストができるはずです。このリストは人気順に20個のタイトルとURLが示されています。

実際に生成されたスプレッドシートはこちらです。みてみてください。

ttps://docs.google.com/spreadsheets/d/1ng8jGiLfGcFYAJPwKWGstXJlZrFyy3jUTKtzmsZHJHg/edit?usp=sharing

hを追加しブラウザに入れてやると実際のスプレッドシートの例がみれます。

うまく動かない時は

表示 → ログをクリックしてください。ログにAPIコマンドのURLで表示されます。この文字列をコピーしてブラウザに直接入力して結果をみてみてください。エラーの内容を確認できます。

例えばIDに問題があればそういったことを示すリターンが帰ってきます。

プログラムの解説

function dmmVideoList() {
var dmmAffId = “アフィリエイトIDを入れる末尾を990にする“;
var dmmApiId = “apiキーを入れる“;
var dmmApiCommand = “https://api.dmm.com/affiliate/v3/ItemList?”;
var sheetidx = “スプレッドシートのURLの文字列“; //データ保存用google Spreadsheet
var mySpread = SpreadsheetApp.openById(sheetidx);   //ブックハンドラの取得
var mySheets = mySpread.getSheetByName(“シート1”);     //シートハンドラの取得

ここでは関数の宣言をし、各種変数の宣言を行なっています。GASでユニークな点としては Sheetidxでコントロールしたいスプレッドシートの指定をしています。またそのスプレッドシートとその中のブックをコントロールするためのハンドラを準備しているところです。

//シートの初期化
mySheets.clear();

ここでシートを初期化しています。真っ白にします。

//コマンドのカスタマイズ
dmmApiCommand = dmmApiCommand + “api_id=” + dmmApiId + “&affiliate_id=” + dmmAffId + “&site=FANZA&service=digital&floor=videoa&output=json”;
Logger.log(dmmApiCommand);//デバック用出力

ここではDMMから情報を得るためのURLを作成しています。今回は詳しく説明しませんがここにオプションを追加していくとDMMから得られる情報のコントロールが可能です。

//APIコマンドの送信
var results = JSON.parse(UrlFetchApp.fetch(dmmApiCommand).getContentText()); //取得&JSON文字列解析

UrlFetchApp.fetchコマンドにてDMMのAPIを叩きにいきます。その結果のJSONを解析してresultに格納しています。

// スプレッドシートへの記入
for (var i = 0; i < results[‘result’][‘result_count’]; i++) {
str = mySheets.getRange(i + 1, 1).setValue(i + 1);
str = mySheets.getRange(i + 1, 2).setValue(results[‘result’][‘items’][i][‘title’]);
str = mySheets.getRange(i + 1, 3).setValue(results[‘result’][‘items’][i][‘URL’] + dmmAffId);
}

}

最後にJSONから各パラメータを取り出しながらシートへの記入を行なっていきます。帰ってくるJSONの構造を理解すれば簡単にデータを取り出せます。

results[][][] という形式でデータを取り出します。

JSONのパラメータ抽出ではその構造の把握が必要です。解析にはぜひツールを使いましょう。今回はこのサイトを使いました。JavaScriptで取り出す時の形式表記もありとても便利です。

 

多くのリアクションがあったら続編も作成しようとおもっています。もしよかったらtwitterフォローしてくださいませ。

@mikoshibax

ばいばい。