蔵書管理に利用しているStack Stock Booksが最近APIを公開しました. ふと思い立って,GreasemonkeyからこのAPIを叩けないかと思って書いてみました.
- APIではOpenIDによる認証が行えないため、利用者IDとAPIトークン(代替識別子)により認証を行います。
- 短期間に大量のAPI呼び出しを行わないでください。 # 入力、出力ともに文字コードはUTF-8です。
- 入力はJSON形式、またはYAML形式です。
- 入力のJSON形式で連想配列({key: value}など)を指定する場合、キーのコロンの後に、半角スペースが必要です。
- 出力はJSON形式です。
- 出力のJSON形式に含まれるASCII以外の文字は、\uXXXX形式で表記されます。
ですが,なんかうまくいきません.最初はGM_xmlhttpRequestでheadersを指定していなかったら
「リクエストが指定されていません」
と返ってきた.入力のJSONがダメなのかなと思っていろいろいじっていたけど,headersを書いたら とりあえず
「処理されました」
と返ってくるようになった.でも,それ以外のレスポンスは
undefined
となっていて結局何もできていない.もうお手上げなので,メールをしてみた.返答待ち.
とりあえず現状のソースは以下の通り.こんなのインストールしちゃだめよ^^
// ==UserScript==
// @name Amazon to StackStockBooks
// @namespace http://blog.riywo.com/
// @version 0.1
// @description Register the book to StackStockBooks from Amazon.
// @include http://*.amazon.co.jp/*
// ==/UserScript==
(function(){
var isbn='';
makeLink();
function makeLink(){
// document.body.parentNode.innerHTML.match(/ISBN-13:[^9]*(978-4\d{9})/);
document.body.parentNode.innerHTML.match(/ASIN:[^4]*(4(\d{8}|-[\d-]{9}-)[\dX])/);
if (RegExp.$1 != ''){
isbn = RegExp.$1.replace(/-/g,'');
var header = document.evaluate("//b[@class='sans']",
document, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null).singleNodeValue;
// var header = document.evaluate("//div[@class='buying']//b[@class='sans']",
// document, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null).singleNodeValue;
if(header){
var ssb_link = document.createElement('span');
ssb_link.setAttribute('id', 'ssb_link');
ssb_link.innerHTML = 'Stack Stock Books!';
ssb_link.addEventListener('click', StackStockBooks, false);
header.parentNode.insertBefore(ssb_link, header.nextSibling);
}
}
}
function StackStockBooks(){
var ssb_link = document.getElementById("ssb_link");
var userid = "userid";
var token = "token";
var url = "http://stack.nayutaya.jp/api/" + userid + "/" + token + "/stocks/update.1";
var nowDate = new Date();
var year = nowDate.getFullYear();
var month = nowDate.getMonth() + 1;
var date = nowDate.getDate();
if(month <10){
month = "0" + month;
}
if(date <10){
date = "0" + date;
}
var fullDate = year + "-" + month + "-" + date;
var inputJSON = "[{asin: \""+isbn+"\", date: \""+fullDate+"\", state: \"wish\", public: true}]";
// alert(encodeURIComponent(inputJSON));
alert(inputJSON);
GM_xmlhttpRequest({
method: "POST",
url: url,
headers: {
"User-agent": "Mozilla/4.0 (compatible) Greasemonkey",
"Accept": "application/atom+xml,application/xml,text/xml",
"Content-Type": "application/x-www-form-urlencoded",
},
// data: "request=" + inputJSON,
data: "request=" + encodeURIComponent(inputJSON),
onload: function(response){
var getJSON = eval('('+ response.responseText +')');
var message = getJSON.message;
ssb_link.innerHTML = message;
alert(getJSON.version+"\n"+getJSON.success+"\n"+getJSON.response.message+"\n"+getJSON.response.title);
}
});
}
})();
// @name Amazon to StackStockBooks
// @namespace http://blog.riywo.com/
// @version 0.1
// @description Register the book to StackStockBooks from Amazon.
// @include http://*.amazon.co.jp/*
// ==/UserScript==
(function(){
var isbn='';
makeLink();
function makeLink(){
// document.body.parentNode.innerHTML.match(/ISBN-13:[^9]*(978-4\d{9})/);
document.body.parentNode.innerHTML.match(/ASIN:[^4]*(4(\d{8}|-[\d-]{9}-)[\dX])/);
if (RegExp.$1 != ''){
isbn = RegExp.$1.replace(/-/g,'');
var header = document.evaluate("//b[@class='sans']",
document, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null).singleNodeValue;
// var header = document.evaluate("//div[@class='buying']//b[@class='sans']",
// document, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null).singleNodeValue;
if(header){
var ssb_link = document.createElement('span');
ssb_link.setAttribute('id', 'ssb_link');
ssb_link.innerHTML = 'Stack Stock Books!';
ssb_link.addEventListener('click', StackStockBooks, false);
header.parentNode.insertBefore(ssb_link, header.nextSibling);
}
}
}
function StackStockBooks(){
var ssb_link = document.getElementById("ssb_link");
var userid = "userid";
var token = "token";
var url = "http://stack.nayutaya.jp/api/" + userid + "/" + token + "/stocks/update.1";
var nowDate = new Date();
var year = nowDate.getFullYear();
var month = nowDate.getMonth() + 1;
var date = nowDate.getDate();
if(month <10){
month = "0" + month;
}
if(date <10){
date = "0" + date;
}
var fullDate = year + "-" + month + "-" + date;
var inputJSON = "[{asin: \""+isbn+"\", date: \""+fullDate+"\", state: \"wish\", public: true}]";
// alert(encodeURIComponent(inputJSON));
alert(inputJSON);
GM_xmlhttpRequest({
method: "POST",
url: url,
headers: {
"User-agent": "Mozilla/4.0 (compatible) Greasemonkey",
"Accept": "application/atom+xml,application/xml,text/xml",
"Content-Type": "application/x-www-form-urlencoded",
},
// data: "request=" + inputJSON,
data: "request=" + encodeURIComponent(inputJSON),
onload: function(response){
var getJSON = eval('('+ response.responseText +')');
var message = getJSON.message;
ssb_link.innerHTML = message;
alert(getJSON.version+"\n"+getJSON.success+"\n"+getJSON.response.message+"\n"+getJSON.response.title);
}
});
}
})();
- Newer: StackStockBooksAPI動いてた
- Older: 活版印刷を体験して,デジタルアーカイブについて聞いてきました
Comments:0
Trackbacks:1
- Trackback URL for this entry
- http://blog.riywo.com/2008/04/29/004943/trackback
- Listed below are links to weblogs that reference
- StackStockBooksAPIがよく分からない from As a Futurist...
- trackback from As a Futurist... 08-04-29 (火) 1:07
-
StackStockBooksAPI動いてた
さっき愚痴ったのはミスだった>< 運営さんすみませんorz StackStockBooksAPIがよく分からない - As a Futurist… レスポンスは相変わらず「undefined」だけど,実はちゃ...

