はじめに
本当はobniz SDK対応パーツのAliExpress最安値の一覧を作りたかったのですが、AliExpressがいつの間にかログイン必須&ボット対策厳しめになってしまったので諦めました…
代わりにパーツライブラリに掲載のあるショップより、件数の多い秋月電子通商、Switch Science、Adafruitの価格の一覧と、AliExpressの最安値検索リンクの一覧を作りました。
(AliExpressのリンクはSearch queryにパーツ名突っ込んでるだけなので、検索結果は中々適当です)
obniz SDK対応パーツ価格一覧
2019/12/10時点のものです。
テーブルの元データ
上記の情報はスクレイピングで取得しています。
一応アクセス先サーバーにあまり負荷がかからないよう1秒ずつsleep入れたり、念の為各サイトの利用規約はチェックしています…
とはいえスクレイピングソースの公開はあれなので、スクレイピングした結果取得できるJSONデータをGistへ公開しています。
お好みのフォーマットに整形して管理してみてください。
Markdownテーブル生成
一例として上記のJSONからMarkdownテーブルを生成するソースです。
インプットのJSONファイル名はresult.json
決め打ちになってます。
const json = require("./result")
const makeMdTable = json => {
const header = ["カテゴリー", "パーツ", "秋月電子通商", "Switch Science", "Adafruit", "AliExpress"]
const separator = ["---","---",":-:",":-:",":-:",":-:"]
const table = [header, separator]
json.map(parts => {
const row = []
row.push(parts.category)
row.push(`[${parts.name}](${parts.url})`)
const shopList = ["akizuki", "switch-science", "adafruit"]
shopList.map((shopName, index) => {
parts.shopList.map(shop => {
if (shop.name === shopName) row.push(shop.data.price ? `[${shop.data.price} / ${shop.data.num || "1個(多分)"}](${shop.url})` : "-")
})
if (row.length < index + 3) row.push("-")
})
// aliexpress
parts.shopList.map(shop => {
if (shop.name === "aliexpress") row.push(`[link](${shop.url})`)
})
table.push(row)
})
const mdTable = table.map(row => `|${row.join("|")}|`).join("\n")
return mdTable
}
console.log(makeMdTable(json))