UEMarketplaceのセール品一覧を出力する
前回(購入済みアセット一覧の出力)に引き続き、
マケプレの情報をChromeのコンソール経由でcsvに吐く話。
使い方
1.マケプレのページを開く。
2.ChromeDeveloperToolのコンソールを表示する。
3.下記のコードを流し込む(お好みで中身を変更してください)
4.ログにcsvが吐かれるのでコピーして保存。
5.Google SpreadSheetにインポート。
6.各行の高さ、各列の幅などを調整。
使い道...?
素直にマケプレで商品眺めたほうがいい気がしないでもない。
ノリで作っただけなので細かいことは気にしないことにする。
// マケプレの商品ソートパラメータ const SORT_TYPE_EFFECTIVEDATE = 'effectiveDate' const SORT_TYPE_DISCOUNT = 'discountPercentage' const SORT_TYPE_TITLE = 'title' const SORT_TYPE_CURRENTPRICE = 'currentPrice' // マケプレのセール種別 // イベントについては現状実施期間外なので未チェック const SALE_TYPE_REGULAR = 'regular%7Cevent' const SALE_TYPE_EVENT = 'event' // アセットの商品カテゴリパラメータ // マケプレにアクセスしたときのurlのassets/以下を参考にしたが、 // 全種類叩いて確認したわけではないので注意 const CATEGORY_2D = 'assets%2F2d' const CATEGORY_ANIMATIONS = 'assets%2Fanimations' const CATEGORY_EFFECTS = 'assets%2Ffx' const CATEGORY_CHARACTERES = 'assets%2Fcharacters' const CATEGORY_CODEPLUGINS = 'assets%2Fcodeplugins' const CATEGORY_SOUNDEFFECTS = 'assets%2Fsoundfx' const CATEGORY_TEXTURES = 'assets%2Ftextures' const CATEGORY_BLUEPRINTS = 'assets%2Fblueprints' const CATEGORY_PROPS = 'assets%2Fprops' const CATEGORY_MATERIALS = 'assets%2Fmaterials' const CATEGORY_ARCHVIS= 'assets%2Farchvis' const CATEGORY_WEAPONS= 'assets%2Fweapons' const CATEGORY_ENVIRONMENTS = 'assets%2environments' const CATEGORY_MUSIC = 'assets%2music' function makeUrl(start, count, sortType, sortDir, saleType, category){ let url = 'https://www.unrealengine.com/marketplace/api/assets?lang=ja&start='+start+'&count='+count+'&sortBy='+sortType+'&sortDir='+sortDir+'&saleType='+saleType if(category && 0<category.length){ return url + '&category=' + category } return url } async function run(sortType, sortDir, saleType, category){ // 必要なループ回数を調べる const pagingQueryResp = await (await fetch(makeUrl(0, 1, sortType, sortDir, saleType, category))).json() const loopMax = Math.ceil(pagingQueryResp.data.paging.total/100) let buffer = '' function writeColumn(body){ buffer = buffer + '"'+body+'",' } for(let i=0;i<loopMax;i++) { // 指定範囲のアセット情報を問い合わせ const requestUrl = makeUrl(i*100, 100, sortType, sortDir, saleType, category) console.log(requestUrl) const response = await fetch(requestUrl) console.log(response) const responseJson = await response.json() console.log(responseJson) const elements = responseJson.data.elements for (let item of elements) { // ほしい内容を拾う writeColumn('=IMAGE(""'+item.thumbnail+'"", 1)') writeColumn(item.title) writeColumn(item.description.replaceAll('"', '""')) if(item.categories && 0 < item.categories.length){ writeColumn(item.categories[0].name) }else{ writeColumn('') } writeColumn(item.seller.name) writeColumn(item.price) writeColumn(item.discount) writeColumn(item.discountPrice) writeColumn(item.discountPercentage) writeColumn(item.compatibleApps.join(",")) writeColumn('https://www.unrealengine.com/marketplace/ja/item/'+item.catalogItemId) buffer = buffer + '\n' } } // ログに結果を出力 console.log(buffer) } await run(SORT_TYPE_DISCOUNT, 'DESC', SALE_TYPE_REGULAR, CATEGORY_CODEPLUGINS)
コピーして保存するのが面倒ならこれとか使うといいかも github.com 前回と違って認証が必須ではないので、ブラウザからにこだわらなければもう少し何かできる気はする...
あとがき
単純に価格監視がしたいなら、そういうサイトがあるようだ。
ただ、何か不具合があるのか、日本円の価格情報は正しくない。
wishlist制限対策としての使い道はありそう。