手作業でぽちぽちするのが辛かったので作った
- https://moneyforward.com/cf を開く
- ブラウザのDevTools を開いてScript を実行
- searchText は「内容」でヒットさせたい文字列
- large_category_id, middle_category_id は、 Networkタブを開いて、1回分類設定したときに飛ぶリクエストを見て設定する
手作業でぽちぽちするのが辛かったので作った
{ | |
// 一括設定したい作品名 | |
const searchText = '作品名' | |
// 趣味・娯楽、本に設定する例 | |
const large_category_id = 13 | |
const middle_category_id = 52 | |
const sleep = (ms) => new Promise((resolve) => setTimeout(resolve, ms)) | |
const csrfToken = document | |
.querySelector('[name="csrf-token"]') | |
.getAttribute('content') | |
const callApi = (id) => async () => { | |
await sleep(2000) | |
console.log(`${id} update`) | |
await fetch('https://moneyforward.com/cf/update', { | |
headers: { | |
accept: 'text/javascript', | |
'accept-language': 'ja-JP,ja;q=0.9,en-US;q=0.8,en;q=0.7', | |
'content-type': 'application/x-www-form-urlencoded; charset=UTF-8', | |
'x-csrf-token': csrfToken, | |
'x-requested-with': 'XMLHttpRequest', | |
}, | |
body: `user_asset_act%5Bid%5D=${id}&user_asset_act%5Blarge_category_id%5D=${large_category_id}&user_asset_act%5Bmiddle_category_id%5D=${middle_category_id}&user_asset_act%5Btable_name%5D=user_asset_act&user_asset_act%5Bis_income%5D=0`, | |
method: 'PUT', | |
mode: 'cors', | |
credentials: 'include', | |
}) | |
} | |
const ids = $$('td.content') | |
.filter((elm) => elm.innerText.includes(searchText)) | |
.map((elm) => elm.parentNode) | |
.filter((elm) => elm.querySelector('td.lctg').innerText === '未分類') | |
.map((elm) => elm.querySelector('[name="user_asset_act[id]"]').value) | |
const tasks = ids.map((id) => callApi(id)) | |
tasks | |
.reduce((promise, task) => promise.then(task), Promise.resolve()) | |
.then(() => alert('done (リロードすると反映されてるはず)')) | |
} |