LoginSignup
0
0

More than 5 years have passed since last update.

Awesome-XXから、githubのスターを取る方法(おまけ)

Posted at

概要

Awesome-XXから、githubのリンクをたどって、スター数を取る方法を書いておきます。

Tips

Nodeのライブラリに、cheerioというライブラリがあります。

XMLやHTMLのパースに、大変便利です。
そのライブラリの友達に、cheerio-httpcliというものがあって、URLからhtmlを取ってこれるので、この2つを使ってごにょごにょすれば、30分もあればスクリプトが出来上がりです。

手順

  1. たとえば、https://github.com/avelino/awesome-go にアクセスし、ページのソースを出して保存します。
  2. github.comで始まるaタグを取得して、そのURLをcheerio-httpcliでパースします。
  3. githubのスターは、「social-count js-social-count」というCSSクラス名で書かれているため、それを取得したら終わりです。

ソース

github-star-gather.js
const fs = require('fs')
const che = require('cheerio')
const client = require('cheerio-httpcli')
try {
    if( process.argv.length !== 3 ) {
        console.log('github-star-gather.js 使用方法\n')
        console.log(' node github-star-gather.js <awesome-html-path>\n')
        process.exit()
    }
    const filePath = process.argv[2]
    const body = fs.readFileSync(filePath, 'utf-8')
  dollar = che.load(body);
  dollar("li").each(function(i0, e0) {
    const arefs = dollar(this).children("a")
    arefs.each(function(i1,e1){
      const href = dollar(this).attr("href")
      if( href.startsWith("https://github.com") === true ) {
        const name = dollar(this).text()
        const result = client.fetchSync(href)
        const $ = result.$
        $(".social-count.js-social-count").each(function(i2,e2) {
          const stars = $(this).text().replace(/¥n/g, "").replace(/¥r/g,"").trim()
          console.log(name + "          " + stars + "          " + href)
        })
        return
      }
    })
  })
} catch(err) {
    console.log(err.message)
}
process.exit()

さいごに

くぅー疲れました。

Markdownの表にして、エクセルに★を出す式を書くところがめんどうでした。

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