kphrx/ZenzaWatch

MylistPocket: マイリストを操作できない

Opened this issue · 3 comments

kphrx commented

www.nicovideo.jp/mylist_add/video/${watchId} が消えてるのでMylistPocketが使えない

ZenzaWatchで使ってるマイリスト関連APIから使えるやつ並べておく

あとで見る(とりあえずマイリスト) API endpoint
nvapi.nicovideo.jp
POST /v1/users/me/deflist/items/${watchId}
POST /v1/users/me/watch-later body: watchId=${watchId}&memo=${memo}

マイリスト API endpoint
nvapi.nicovideo.jp
POST /v1/users/me/mylists/${mylistId}/items?itemId=${itemId:watchId}&description=${memo}

kphrx commented

ニコニコ大百科の掲示板での報告: 1493, 1495, 1500

kphrx commented

DeflistApiLoader._addItem/4

ZenzaWatch/src/_pocket.js

Lines 2418 to 2497 in 7687a7a

static __addItem({watchId, description, token, isRetry = false}) {
const cacheKey = 'deflistItems';
const url = 'https://www.nicovideo.jp/api/deflist/add';
let body = 'item_id=' + watchId + '&token=' + token;
if (description) {
body += '&description='+ encodeURIComponent(description);
}
const req = {
method: 'post',
credentials: 'include',
body,
headers: { 'Content-Type': 'application/x-www-form-urlencoded' },
};
return new Promise((resolve, reject) => {
fetch(url, req)
.then((res) => { return res.json(); })
.then((result) => {
if (result.status && result.status === 'ok') {
cacheStorage.removeItem(cacheKey);
//ZenzaWatch.emitter.emitAsync('deflistAdd', watchId, description);
return resolve({
status: 'ok',
result: result,
message: 'とりあえずマイリスト登録'
});
}
if (!result.status || !result.error) {
return reject({
status: 'fail',
result: result,
message: 'とりあえずマイリスト登録失敗(100)'
});
}
if (result.error.code !== 'EXIST' || isRetry) {
return reject({
status: 'fail',
result: result,
code: result.error.code,
message: result.error.description
});
}
/**
* すでに登録されている場合は、いったん削除して再度追加(先頭に移動)
*/
return DeflistApiLoader.removeItem(watchId)
.then(util.getSleepPromise(1500, 'deflist remove'))
.then(() => {
return DeflistApiLoader._addItem(watchId, description, true)
.then((result) => {
resolve({
status: 'ok',
result: result,
message: 'とりあえずマイリストの先頭に移動'
});
});
}, (err) => {
reject({
status: 'fail',
result: err.result,
code: err.code,
message: 'とりあえずマイリスト登録失敗(101)'
});
});
}, (err) => {
reject({
status: 'fail',
result: err,
message: 'とりあえずマイリスト登録失敗(200)'
});
});
});
}

mylist-window command

ZenzaWatch/src/_pocket.js

Lines 3548 to 3553 in 7687a7a

case 'mylist-window':
window.open(
protocol + '//www.nicovideo.jp/mylist_add/video/' + param,
'nicomylistadd',
'width=500, height=400, menubar=no, scrollbars=no');
break;

kphrx commented

MylistApiLoaderをMylistPocketで使うようにしたから任意のマイリストに追加する機能はUI作れば良い