Skip to content

Instantly share code, notes, and snippets.

@azu
Created January 5, 2010 13:57
Show Gist options
  • Star 9 You must be signed in to star a gist
  • Fork 2 You must be signed in to fork a gist
  • Save azu/269384 to your computer and use it in GitHub Desktop.
Save azu/269384 to your computer and use it in GitHub Desktop.
Pixivの検索API叩く
// ==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("東方");// 検索ワード
@azu
Copy link
Author

azu commented Jul 29, 2010

これ間違いあるからそのままじゃ動作しない

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment