무료로 읽고 싶다! 도서관 API에서 신서가 도서관에 등록된 타이밍에 LINE 통지한다(그 2)
배경
지난번 계속.
지난번은 도서관 API에 대한 기사를 작성했으므로 이번에는 Google 스프레드 시트의 Google Action Script (=GAS)에 대한 기사를 작성합니다.
어떻게 실현합니까? (이전 기사에서 발췌)
Google Spreadsheet 정보
완성 이미지
![](https://s1.md5.ltd/image/74810c59b50be93f4dc4066dd99b2b30.png)
컬럼은 3개만의 심플한 구성으로 했습니다.
정기 점검 대상으로 할지 여부의 플래그로한다. (예약 후 LINE 통지가 필요하지 않으므로)
도서관 API의 검색 키가 된다.
ISBN뿐이라면 서적 제목을 모르기 때문에 추가. LINE 통지시에도 사용한다.
GAS 소스 코드
Google Spreadsheet 메뉴에서 도구 → 스크립트 편집기에서 편집기를 열고 코드를 작성합니다.
CALIL_APP_KEY
및 LINE_API_TOKEN
는 스크립트 편집기 메뉴에서 파일> 프로젝트 속성을 열고 여기에 값을 저장합니다.![](https://s1.md5.ltd/image/88dc453e18215718d1899199a21c6372.png)
GAS 소스
function getBookStatus(isbn, title, appkey, systemid) {
var res_finish = false;
var no_registed = false;
var res_json = '';
while (true) {
res_json = callCalilApi(appkey, isbn, systemid);
if ( isFinish(res_json) ) {
Utilities.sleep(1000);
break;
}
}
//var rj = JSON.parse(res_json);
no_registed = res_json.match(/"libkey": {}/);
Logger.log('rj = ' + res_json + 'no_registed = ' + no_registed );
if ( no_registed ) {
Logger.log('【未登録】ISBN:[' + isbn + ']の[' + title + ']は横浜市の図書館に登録されていません。');
} else {
var msg = '【登録済】ISBN:[' + isbn + ']の[' + title + ']は横浜市の図書館に登録されてます。'
Logger.log(msg);
notifyLine(msg)
}
}
function isFinish(res_json){
return res_json.match(/"continue": 0/);
}
function callCalilApi(appkey, isbn, systemid) {
var response = UrlFetchApp.fetch('http://api.calil.jp/check?appkey=' + appkey + '&isbn=' + isbn + '&systemid=' + systemid + '&format=json');
// XMLだとDTDが必要なのでやめた。(カーリルにDTDがない)
// でも、コールバック処理の扱いがGASではわからない
// むりやり文字列でcontinueを判定w
res_json = response.toString().slice(9,-2);
Logger.log(res_json);
return res_json ;
}
function notifyLine(message) {
var TOKEN = PropertiesService.getScriptProperties().getProperty("LINE_API_TOKEN");
var res = null;
var options = {
"method": "post",
"payload": "message=" + message,
"headers": {"Authorization" : "Bearer "+ TOKEN}
};
res = UrlFetchApp.fetch("https://notify-api.line.me/api/notify", options);
return res;
}
function main() {
// スプレッドシートから読み込む
// アクティブなシートを取得
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sh = ss.getActiveSheet();
//getRangeで範囲を指定し、getValuesで値を取得
var checkbooks = sh.getRange('A4:C100').getValues();
// 固定
var appkey = PropertiesService.getScriptProperties().getProperty("CALIL_APP_KEY");
var systemid = 'Kanagawa_Yokohama'
for(var i=0; i<checkbooks.length; i++) {
var idx_check = 0
var idx_isbn = 1
var idx_title = 2
if( checkbooks[i][idx_check] === "チェックしない" || checkbooks[i][idx_isbn] === "" ){
continue ;
}
getBookStatus(checkbooks[i][idx_isbn], checkbooks[i][idx_title], appkey, systemid);
}
}
요약
이 도구를 사용하여 "입문 모니터링 (ISBN : 4873118646)"을 두 번째로 예약 할 수있었습니다.
오전 2시 19 분에 첫 번째 LINE 알림이 왔고 10시 19 분에 LINE 알림을 받고 즉시 예약했지만 8 시간 동안 예약 한 사람이 있음에 놀랐습니다.
(1번에 예약하기 위해서는 자동 예약의 구조가 필요하네요)
마지막으로,
GAS의 js 소스 코드가 꽤 어색하고 죄송합니다. 최근 js 소스에 쓰지 않았기 때문에 우선 움직이는 것이 최우선으로 에이야에서 썼습니다.
callback 처리를 알지 못했기 때문에 상당히 적절한 소스 코드이지만 목적을 달성했기 때문에 좋다고 생각합니다.
참고 페이지
htps : // / ぃ l. jp/do c/ap. HTML
Reference
이 문제에 관하여(무료로 읽고 싶다! 도서관 API에서 신서가 도서관에 등록된 타이밍에 LINE 통지한다(그 2)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/keita69sawada/items/b5da2b10cf4b7b0e9d2c텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)