Kindle本の購入履歴をTSVにする
2021年、人類はスクレイピングに回帰したのであった
注文履歴を kindle で検索したページで実行する
code:10.js
(() => {
const orders = $$('#ordersContainer .a-fixed-left-grid-inner');
const rows = [];
for (const order of orders) {
const orderId = order.querySelector('.a-row.a-spacing-base .a-link-normal').getAttribute('href').match(/orderId=(.+)/i)1;
const orderDate = order.querySelector('.a-row.a-spacing-base').textContent.match(/注文日: (.+) /)1.replace(/年月/g, '/').replace('日', '').trim() + ' 9:00:00'; // 時刻は適当
const book = order.querySelector('.a-row .a-link-normalhref*="/gp/product/"');
const asin = book.getAttribute('href').match(/\/gp\/product\/(A-Z0-9+)\//)1;
const productUrl = https://www.amazon.co.jp/dp/${asin}/;
const bookName = book.textContent.replace(/\(Kindle 書籍\s+Kindle Books\)/, '').trim();
rows.push(orderId, orderDate, bookName, productUrl, asin);
}
copy(rows.map(r => r.join('\t')).join('\n'));
})();
https://www.amazon.co.jp/gp/css/order-history で実行する
code:js
(() => {
const orders = $$('.js-order-card').filter(e => e.textContent.includes('Kindle 版'));
const rows = [];
for (const order of orders) {
const orderId = order.querySelector('bdi').textContent;
const orderDate = order.querySelector('.a-color-secondary.value').textContent.replace(/年月/g, '/').replace('日', '').trim() + ' 9:00:00'; // 時刻は適当
const books = order.querySelectorAll('.a-fixed-left-grid-col .a-row .a-link-normalhref*="/gp/product/"');
for (const book of books) {
const asin = book.getAttribute('href').match(/\/gp\/product\/(A-Z0-9+)\//)1;
const productUrl = https://www.amazon.co.jp/dp/${asin}/;
const bookName = book.textContent.trim();
rows.push(orderId, orderDate, bookName, productUrl, asin);
}
}
copy(rows.map(r => r.join('\t')).join('\n'));
})();
「注文内容を表示」の遷移先ページで実行する
code:2.js
// TODO
(() => {
const orders = $$('tbody').filter(e => e.textContent.includes('Kindle 版'))3;
const rows = [];
for (const order of orders) {
const orderId = order.querySelector('bdi').textContent;
const orderDate = order.querySelector('.a-color-secondary.value').textContent.replace(/年月/g, '/').replace('日', '').trim() + ' 9:00:00'; // 時刻は適当
const books = order.querySelectorAll('.a-fixed-left-grid-col .a-row .a-link-normalhref*="/gp/product/"');
for (const book of books) {
const asin = book.getAttribute('href').match(/\/gp\/product\/(A-Z0-9+)\//)1;
const productUrl = https://www.amazon.co.jp/dp/${asin}/;
const bookName = book.textContent.trim();
rows.push(orderId, orderDate, bookName, productUrl, asin);
}
}
copy(rows.map(r => r.join('\t')).join('\n'));
})();
TODO
注文番号を入れる
注文した日時を入れる
適当でよい
商品名を入れる
ASINを入れる
商品URLを入れる
メモ
ひとつの注文は .js-order-card というセレクタで取得できる要素にまとまっている