[PYTHON] Obtenez les résultats de la recherche de balises de la vidéo Nico Nico au format XML. (Aucune connexion requise)

Aperçu

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.

code

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

Image de sortie

http://i.nicovideo.jp/v3/video.array?v=sm9720246,sm19673281

Impressions

Je dois analyser les données pour le développement de la culture Yuri ... (sens de la mission)

Page de référence

-> 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

Obtenez les résultats de la recherche de balises de la vidéo Nico Nico au format XML. (Aucune connexion requise)
Prétraitement avec Python. Convertir les résultats de recherche de balises de la vidéo Nico Nico au format CSV
Résultats qui n'ont pas été pris en compte dans la recherche avec ce mot
[Python] Explorez les caractéristiques des titres des meilleurs sites dans les résultats de recherche Google
Lire le commentaire de la vidéo de Nico Nico sur le terminal en conjonction avec la vidéo
À la recherche du FizzBuzz le plus rapide en Python
Obtenez la taille d'un fichier image sur le Web (Python3, aucune bibliothèque supplémentaire requise)
Récupérer l'appelant d'une fonction en Python
Rechercher par la valeur de l'instance dans la liste
Comment obtenir le nombre de chiffres en Python
À la recherche du meilleur stéréogramme à points aléatoires (RDS).
Obtenez l'image de "Suzu Hirose" par recherche d'images Google.
[python] Récupère la liste des classes définies dans le module
Obtenez des résultats au format dict avec Python psycopg2
Obtenir la taille (nombre d'éléments) de Union Find en Python
Différence de résultats en fonction de l'argument du multiprocessus.
Obtenez l'URL de la destination de la redirection HTTP en Python