マイリストへの追加についてはもうあるようなので、マイリストからの削除を実装します。
基本的に上記のソースを流用するので、実装はpythonです。
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import sys, re, urllib, urllib2, cookielib, time, netrc
import json
import ssl_tlsv1
class NicoVideo:
_API="http://www.nicovideo.jp/api/"
def __init__(self, user = None, passwd = None):
if not user or not passwd:
user,a,passwd = netrc.netrc().authenticators("nicovideo")
opener = self.login(user, passwd);
html = opener.open("http://www.nicovideo.jp/my/mylist").read()
p = html.find("NicoAPI.token")
t,a = html[p:].split(';',1)
token = re.search('"(.*?)"', t).group(1)
self.opener = opener
self.token = token
def login(self, username, password):
cj = cookielib.CookieJar()
opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cj))
req = urllib2.Request("https://secure.nicovideo.jp/secure/login?site=niconico");
req.add_data(urllib.urlencode({"mail": username, "password": password}))
opener.open(req)
return opener
def get_token(self):
return self.token
def __get(self, url, data):
return json.load(self.opener.open(url + "?" + urllib.urlencode(data)), encoding='utf8')
def __post(self, url, data):
return json.load(self.opener.open(url, urllib.urlencode(data)), encoding='utf8')
def create_mylist(self, name):
j = self.__get(self._API + "mylistgroup/add", {
'name': name.encode("utf8"),
'description': "",
'public': 0,
'default_sort': 0,
'icon_id': 0,
'token': self.token
})
return j['id']
def get_mylists(self):
j = self.__get(self._API + "mylistgroup/list", {
'token': self.token
})
return j
def get_mylist(self, mylist_id):
j = self.__get(self._API + "mylist/list", {
'group_id': mylist_id,
'token': self.token
})
return j
def add_video(self, mylist_id, video_id):
_list = video_id
if not isinstance(_list, list):
_list = [video_id]
for video_id in _list:
j = self.__get(self._API + "mylist/add", {
'group_id': mylist_id,
'item_type': 0,
'item_id': video_id,
'description': u"",
'token': self.token
})
time.sleep(0.5)
def remove_video(self, mylist_id, item_id):
_list = item_id
if not isinstance(_list, list):
_list = [item_id]
for item_id in _list:
j = self.__post(self._API + "mylist/delete", {
'group_id': mylist_id,
'id_list[0][]': item_id,
'token': self.token
})
time.sleep(0.5)
削除用のパラメタは id_list[0][]=item_id って感じで指定します。
複数削除する場合は、 id_list[0][]=item_id1&id_list[0][]=item_id2 ってカンジで書けばイイっぽいんですが、pythonで同名のキーを渡す方法が分からなかったので諦めてループさせています。
item_id は sm9 のような動画IDを渡すのではない点に注意。マイリストを取得して対象の動画の item_id を確認してください。
たとえば、上記のスクリプトをnocovideo_ctl.py という名前で保存したとして、対象のマイリストの最初の動画を削除する、という場合は以下のようなコードになります。
import json
import nicovideo_ctl
mylist_id = 'XXXXXXXX' # 対象のマイリストID
nicovideo = nicovideo_ctl.NicoVideo()
mylist = nicovideo.get_mylist(mylist_id)
print json.dumps(mylist, ensure_ascii=False)
item_id = mylist["mylistitem"][0]["item_id"]
nicovideo.remove_video(mylist_id, item_id)
mylist = nicovideo.get_mylist(mylist_id)
print json.dumps(mylist, ensure_ascii=False)
なお、コメントの import ssl_tlsv1 っていうのは、この記事にあるようにSSLをTLSv1でアクセスするためのものです。(※該当の回避コードを外部ファイルにしただけ)
このコードをRaspberryPi上で動かす場合には必要になるので、該当コードを同ディレクトリにでも置いてください。