LoginSignup
0
0

More than 5 years have passed since last update.

gistのファイル表示。600gist 180000 files まで表示する。

Posted at

自分のuser名で、ページ付きで検索をする。

let url = `https://api.github.com/users/${u}/gists?page=${i}`
//ex. u=gnjo,i = 1 ... 100

ページが存在するかは headerの linkで見ることができるが、存在しないページを表示すれば、配列が[]で返ってくるので打ち切りがわかる。

 if(d.length==0) return sol(ary)

1pageは30gistまで検索できる。20 loop とりあえずする。

1gistは truncatedなしで300fileまで表示できる。

function searchall(sys,max=20){return new Promise(sol=>{
 let ary=[],i=1
 ,str =sys.auth
 ,url =`https://api.github.com/users/${sys.u}/gists`
 ,opt={method:'GET',mode:'cors',headers:{"Authorization":str}}
 ,f=()=>{
   let u=`${url}?page=${i}`
   ,loop =(d)=>{
      if(d.length==0) return sol(ary)
      ;[].push.apply(ary,d);
      if(i>max) return sol(ary)
      i++;
      return f()
   }
   ;
   return fetch(u,opt).then(res=>res.json()).then(loop)
 }
 ;
 f()///
 ;
})}

結果最大で180000filesまで表示可能。

これだけあれば十分だろう。
実際のデータは raw_urlを表示するのみ。認証は必要なし。

function read(raw_url){
  let log=(d)=>{console.log(d);return d}
  return fetch(raw_url)
    .then(d=>d.text())
    .then(log)
  ;
}

全部

pickを変更して、必要な情報の取捨をする。

<button onclick="b()">go</button>
<pre></pre>

function searchall(sys,max=20){return new Promise(sol=>{
 let ary=[],i=1
 ,str =sys.auth
 ,url =`https://api.github.com/users/${sys.u}/gists`
 ,opt={method:'GET',mode:'cors',headers:{"Authorization":str}}
 ,f=()=>{
   let u=`${url}?page=${i}`
   ,loop =(d)=>{
      if(d.length==0) return sol(ary)
      ;[].push.apply(ary,d);
      if(i>max) return sol(ary)
      i++;
      return f()
   }
   ;
   return fetch(u,opt).then(res=>res.json()).then(loop)
 }
 ;
 f()///
 ;
})}
;
function b(){
  var u= window.prompt('u?');
  if(!u) return;
  var p =window.prompt('p?');
  if(!p) return;
  var sys={};  
  sys.u =u
  sys.auth ='basic '+btoa(sys.u+':'+p)
  ;
  let draw =(d)=>{document.querySelector('pre').innerHTML = JSON.stringify(d,null,2);return d;}
  ,pick =(d)=>{
    let ary=[];
    d.forEach(d=>{
      Object.keys(d.files).forEach(key=>{
         let add ={id_url:d.url, id:d.id, description:d.description}
         ary.push( Object.assign({},d.files[key],add) )
      })
    })
    ;
    return ary;
  }
  ,log=(d)=>{console.log(d);return d}
  ;
  //30*20 =max 600gist 600*300files =max 180000 files
  searchall(sys,20)
   .then(log)
   .then(pick) //
   .then(draw)
  ;
}
//raw_url be the no-auth.
function read(raw_url){
  let log=(d)=>{console.log(d);return d}
  return fetch(raw_url)
    .then(d=>d.text())
    .then(log)
  ;
}
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0