-
-
Save maicos/324971 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// ==UserScript== | |
// @name pixiv API | |
// @namespace http://efcl.info/ | |
// @include http://www.pixiv.net/* | |
// ==/UserScript== | |
// API 資料 http://pastie.org/735195 | |
var pxvAPI = "http://iphone.pxv.jp/iphone/" | |
// 検索結果のオブジェクト | |
var result = []; | |
var user = { | |
name:"",//ログインID | |
pass:""//ログインパス | |
} | |
// loginをして、PHPSESSIDを返す | |
function getPHPSESSID(){ | |
GM_xmlhttpRequest({ | |
method: 'GET', | |
url: pxvAPI + "login.php?mode=login&pixiv_id="+user.name+"&pass="+user.pass+"&skip=0", | |
onload: function(res){ | |
return getParameter(res.finalUrl)["PHPSESSID"]; | |
}, | |
}); | |
} | |
// Query String から 配列を返す | |
function getParameter(str){ | |
var dec = decodeURIComponent; | |
var par = new Array, itm; | |
if(typeof(str) == 'undefined') return par; | |
if(str.indexOf('?', 0) > -1) str = str.split('?')[1]; | |
str = str.split('&'); | |
for(var i = 0,l = str.length; i<l; i++){ | |
itm = str[i].split("="); | |
if(itm[0] != ''){ | |
par[itm[0]] = typeof(itm[1]) == 'undefined' ? true : dec(itm[1]); | |
} | |
} | |
return par; | |
} | |
// PHPSESSIDを取得 | |
var PHPSESSID = getPHPSESSID(); | |
//詳細画面から色々なデータ取ってくるクラス。PHPSESSIDが必要 | |
var IllustData = function(obj) { | |
this.illustId = trim(obj[0]);//イラストID | |
this.memberID = trim(obj[1]);//ユーザーID | |
this.type = trim(obj[2]);// 拡張子 | |
this.title = trim(obj[3]);//タイトル | |
this.imgserver = trim(obj[4]);//imgサーバの番号 | |
this.author = trim(obj[5]);//作者 | |
this.thumbURL = trim(obj[6]);// サムネイルURL | |
this.imageMURL = trim(obj[7]);// 画像URL | |
this.submitted = trim(obj[8]);//投稿日 | |
this.tags = '"'+trim(obj[9])+'"';//タグ | |
this.tool = trim(obj[10]);//ツール | |
this.appreciatedCount = trim(obj[11]);//評価回数 | |
this.totalPoint = trim(obj[12]);//総合点 | |
this.views = trim(obj[13]);// 閲覧数 | |
this.comment = trim(obj[14]);//作者コメント | |
this.url = "http://www.pixiv.net/member_illust.php?mode=medium&illust_id="+this.illustId; | |
this.imageURL = "http://img"+this.imgserver+".pixiv.net/img/"+this.thumbURL.split("/")[4]+"/"+this.illustId+"."+this.type; | |
return this; | |
} | |
var IllustDataParser = { | |
getData : getData, | |
parseDate : parseDate | |
} | |
function getData(word){ | |
var self = this; | |
GM_xmlhttpRequest({ | |
method: 'GET', | |
url: pxvAPI + "search.php?s_mode=s_tag&word="+decodeURI(word)+"&PHPSESSID="+PHPSESSID+"&p=1", | |
onload: function(res){ | |
IllustDataParser.parseDate(res.responseText); | |
}, | |
}); | |
} | |
function parseDate(res){ | |
var ind = res.split(",,,,\n"); | |
var ary = []; | |
// 個々の作品毎の配列 | |
for(var k=0,l=ind.length;k<l;k++){ | |
ary[k] = splitText(ind[k] , ","); | |
} | |
//IllustDataを作成 | |
for(var i=0,l = ary.length;i<l;i++){ | |
result[i] = new IllustData(ary[i]); | |
} | |
mainWrite() | |
} | |
function trim(str){ | |
if(str) | |
return str.slice(1,str.length-1); | |
} | |
/** | |
* 文字列から区切り文字で切った配列を作成する。 | |
* 空要素は除外される。 | |
* 配列が空の場合は、空文字列が返される。。 | |
* | |
* @param {Array} txts 文字列。 | |
* @param {String} delm 区切り文字列。 | |
* @return {String} 区切られた配列。 | |
*/ | |
function splitText(txts , delm){ | |
if(!txts) | |
return ''; | |
if(delm==null) | |
delm = ','; | |
return txts.split(delm).filter(truth) ; | |
} | |
/** | |
* 配列を結合し文字列を作成する。 | |
* 空要素は除外される。 | |
* 配列が空の場合は、空文字列が返される。。 | |
* | |
* @param {Array} txts 文字列配列。 | |
* @param {String} delm 区切り文字列。 | |
* @return {String} 結合された文字列。 | |
*/ | |
function joinText(txts, delm){ | |
if(!txts) | |
return ''; | |
if(delm==null) | |
delm = ','; | |
txts = [].concat(txts).filter(truth); | |
return txts.join(delm); | |
} | |
function truth(a){ | |
return !!a; | |
} | |
// メイン処理 | |
function mainWrite(){ | |
//検索結果のオブジェクトを使って何かする | |
console.log(result[0].imageURL); | |
} | |
/* init */ | |
if(user.name && user.pass) | |
IllustDataParser.getData("東方");// 検索ワード |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment