[PYTHON] Gratter l'holojour et l'afficher dans la CLI

J'ai fait un programme pour gratter l'holojour, qui est le calendrier de livraison de hololive, et afficher le contenu facilement avec CLI.

Code source

GitHub

Précautions d'emploi

Cet outil utilise les requêtes comme bibliothèque externe. Si vous avez déjà installé pip Vous pouvez répondre avec demandes d’installation pip </ b>

De plus, cet outil n'a rien à voir avec la formule Holorive. Ne surchargez pas le serveur avec plus d’exécution que nécessaire.

Comment utiliser

Vous pouvez afficher le contenu suivant en exécutant main.py dans le référentiel. alt

Vous pouvez également ajouter des options lors de l'exécution et vérifier leur contenu avec --help. Par exemple,

---- tous Afficher tous les horaires sauf les vidéos Bilibili, y compris les Holosters ---- fra Afficher les noms des membres en anglais ---- Demain Afficher l'horaire de demain

Etc. peut être utilisé. Ces options peuvent être définies et exécutées en même temps.

Notes Notez où vous êtes coincé dans la production.

Tout d'abord, je m'inquiétais de savoir comment séparer les membres hololive des autres des données obtenues par grattage. En réponse

scraping.py


def delete_exception(time_list, stream_members_list, stream_url_list, is_all):

    EXCEPTION_LIST = {'Yogiri', 'Civia', 'SpadeEcho', 'Doris', 'Artia', 'Rosalyn'}

    if not is_all:
        #Slice to get only non-hololive members (e.g. holostars hololive-ID)
        EXCEPTION_LIST =  EXCEPTION_LIST | set(get_member_list()[29:])

    for i in range(len(time_list)):

        if stream_members_list[i] in EXCEPTION_LIST:
            time_list[i] = None
            stream_members_list[i] = None
            stream_url_list[i] = None

    time_list = [i for i in time_list if not i is None]
    stream_members_list = [i for i in stream_members_list if not i is None]
    stream_url_list = [i for i in stream_url_list if not i is None]

    return time_list, stream_members_list, stream_url_list

Préparez à l'avance un ensemble de membres de la distribution Hololive Youtube et des membres de la distribution Bilibili. J'ai créé un ensemble de membres à exclure des options, etc., remplacé les éléments grattés qui lui appartenaient par Aucun, et les ai finalement supprimés collectivement dans la notation d'inclusion.

En passant, vous pouvez également l'implémenter dans une liste, mais si vous n'avez pas besoin des numéros d'élément, il est beaucoup plus rapide d'utiliser un ensemble qu'une liste.


Un autre problème était qu'il y avait des membres dont les noms étaient anglais et japonais, et en raison de la différence entre demi-largeur et pleine largeur, il n'était pas possible d'afficher les colonnes proprement. Pour résoudre ce problème, j'ai utilisé la bibliothèque standard unicodedata .

unicode


if unicodedata.east_asian_width(stream_members_list[i][0]) == 'W': 
    m_space = ' ' * ( (-2 * len(stream_members_list[i]) + 18))               

else:
    m_space = ' ' * ( (-1 * len(stream_members_list[i]) ) + 18)

east_asian_width d'unicodedata renvoie W lorsque le caractère d'argument (un caractère car il s'agit de Char) est un caractère japonais pleine largeur. En conséquence, il était possible d'afficher les lignes dans une ligne uniforme en utilisant des espaces, en tenant compte du nombre de caractères dans le nom.

finalement

Je suis content qu'il ait déjà été cloné par certaines personnes. Nous continuerons à améliorer ce référentiel.

Recommended Posts