Obtenez les résultats de la recherche de balises de la vidéo Nico Nico au format XML. Il semble qu'il existe une API de recherche existante, mais elle est difficile à utiliser car une connexion est requise. (→ Article de référence: Spécifications de l'API de recherche pour Nico Nico Video) J'ai écrit du code Python à utiliser sans connexion.
nc2xml.py
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# nc2xml.py
# Copyright (c) 2014 nezuq
# This software is released under the MIT License.
# http://opensource.org/licenses/mit-license.php
import sys
import time
import datetime
import urllib
import urllib2
from lxml import etree
argvs = sys.argv
argc = len(argvs)
#Mot-clé de recherche
KEYWORD = u'Kimashitawa'
if 1 < argc:
KEYWORD = argvs[1].decode('utf-8')
#Critères de tri
#SORT_TYPE = 'n' #Date et heure de publication du dernier commentaire
#SORT_TYPE = 'v' #Vues
#SORT_TYPE = 'm' #Ma liste
#SORT_TYPE = 'r' #Nombre de commentaires
SORT_TYPE = 'f' #Date et heure de publication
#SORT_TYPE = 'l' #Temps de lecture
if 2 < argc:
SORT_TYPE = argvs[2]
#Numéro de page cible(Page de démarrage de l'acquisition d'ID)
MIN_PAGENUMBER = 1
if 3 < argc:
MIN_PAGENUMBER = int(argvs[3])
#Numéro de page cible(Page de fin d'acquisition d'identifiant)
MAX_PAGENUMBER = 3
if 4 < argc:
MAX_PAGENUMBER = int(argvs[4])
#méthode de récupération
SEARCH_TYPE = 'tag' #Recherche de tag
def main():
keyword = urllib2.quote(KEYWORD.encode("utf-8"))
ids = []
nrow_bef = -1
npage = MIN_PAGENUMBER - 1
while ((nrow_bef != len(ids)) and (npage < MAX_PAGENUMBER)):
npage += 1
uri = 'http://www.nicovideo.jp/%s/%s?sort=%s&rss=2.0&page=%d' % (SEARCH_TYPE, keyword, SORT_TYPE, npage)
print u'Demande d'ID vidéo:' + uri
time.sleep(1)
res = urllib2.urlopen(uri)
rss = etree.fromstring(res.read())
nrow_bef = len(ids)
ids += map((lambda x: x.text.rsplit('/', 1)[1]), rss.findall('./channel/item/link'))
query = 'http://i.nicovideo.jp/v3/video.array?v=' + ','.join(ids)
print u'Acquérir des données vidéo:' + query
d = datetime.datetime.today()
#* Si la demande prend plus de 20 secondes, elle expirera et le nombre sera 0.
#* L'émission d'une requête à forte charge peut être un bloc IP ou un bloc API, donc c'est NG.
time.sleep(1)
urllib.urlretrieve(query, u'%s_%s.xml' % (KEYWORD, d.strftime('%y%m%d%H%M%S')))
print 'end!'
if __name__ == '__main__':
main()
nc2xml.Exécutez py.
python nc2xml.py "lis" m 1 3
http://i.nicovideo.jp/v3/video.array?v=sm9720246,sm19673281
Je dois analyser les données pour le développement de la culture Yuri ... (sens de la mission)
-> Spécifications de l'API de recherche vidéo Niko Niko organisées -> Comparaison de l'API i.nicovideo.jp et de l'API getthumbinfo -> J'ai vérifié l'API de recherche des vidéos Nico Nico, j'ai donc pris une note -> Obtenir les résultats de recherche de tags de la vidéo Nico Nico par RSS
Recommended Posts