1/30 post-scriptum C'était terminé [Terminé] bot qui publie la notification de démarrage de la diffusion en direct de Nico Nico sur Discord sur discord.py
C'est le premier message de Qiita Je m'appelle Ryo, également connu sous le nom de fctokyo1016. Twitter → @ fctokyo1016 Je développe généralement avec PHP. C'est un code fait par un amateur qui est ingénieur depuis plusieurs années, alors j'espère que vous pourrez l'ignorer.
--Niko Niko Live Broadcast équipe de planification à laquelle appartiennent environ 10 personnes, chacun pouvant diffuser librement en direct dans la même communauté
――Comme mentionné ci-dessus, en raison du changement des spécifications d'alerte de Nico Live, ni RSS ni API ne prennent en charge la diffusion en direct des utilisateurs.
――Pouvez-vous utiliser le grattage que vous avez un peu touché dans le passé? ――Je voulais juste étudier Python
La diffusion de nos membres a effectivement été notifiée
discordbot.py
import requests
import os.path
import re
import discord
import asyncio
from bs4 import BeautifulSoup
#Spécifiez le chemin du fichier pour la gestion des notifications
listFilePath = 'list.txt'
#Remplacez par le jeton d'accès de votre bot
TOKEN = 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXX'
#Tout identifiant de chaîne(int)
CHANNEL_ID = 0000000000000000
#Définissez la communauté que vous souhaitez vérifier
targetCommunitys = ['co1520016']
#Renvoie True s'il y a une recherche dans la liste et False s'il n'y en a pas
def searchList(liveURL):
#Vérification de l'existence du fichier
if not os.path.exists(listFilePath):
return False
liveLV = liveIdExtraction(liveURL)
#Vérification en dossier
with open(listFilePath) as f:
for i, line in enumerate(f):
if line == liveLV + '\n':
return True
print(line)
return False
#Ajouter l'identifiant de diffusion à la liste
def addList(liveURL):
liveLV = liveIdExtraction(liveURL)
with open(listFilePath, 'a') as f:
print(liveLV, file=f)
#Identifiant de diffusion de l'URL de diffusion(lvXXXXXXX)Extraction
def liveIdExtraction(liveURL):
repatter = re.compile('lv[0-9]+')
return repatter.search(liveURL).group()
#Obtenir le titre de diffusion à partir de l'URL de diffusion
def getLiveTitle(liveURL):
r = requests.get(liveURL)
soup = BeautifulSoup(r.content, "html.parser")
for meta_tag in soup.find_all('meta', attrs={'property': 'og:title'}):
return meta_tag.get('content')
#Obtenez le nom du diffuseur à partir de l'URL de diffusion
def getLiveName(liveURL):
r = requests.get(liveURL)
soup = BeautifulSoup(r.content, "html.parser")
return soup.find("span",{"class":"name"}).text
#Générer les objets nécessaires à la connexion
client = discord.Client()
#Traitement qui fonctionne au démarrage
@client.event
async def on_ready():
while(True):
#Répétez pour le nombre de communautés cibles
for targetCommunity in targetCommunitys:
#Définir l'URL
r = requests.get("https://com.nicovideo.jp/community/" + targetCommunity)
#Consultez la page TOP de la communauté
soup = BeautifulSoup(r.content, "html.parser")
result = soup.find("section", "now_live")
#Si la diffusion a commencé
if result is not None:
#Obtenir l'URL de diffusion
liveURL = result.find("a", "now_live_inner").get("href")
#Rechercher dans la liste et ne pas traiter si l'ID de diffusion a déjà été traité
if searchList(liveURL) is False:
#Obtenir le titre de la diffusion
liveTitle = getLiveTitle(liveURL)
#Obtenez le nom du diffuseur
liveName = getLiveName(liveURL)
#Envoyer à Discord
channel = client.get_channel(CHANNEL_ID)
await channel.send('@everyone ' + liveName + 'A commencé la livraison\n\n' + liveTitle + '\n' + liveURL)
#ID de diffusion postscript
addList(liveURL)
#Attendez 1 minute
await asyncio.sleep(60)
#Connectez-vous à Discord
client.run(TOKEN)
Spécifiez le nom de fichier du fichier texte qui quitte la diffusion une fois traitée. comme vous voulez
discordbot.py
#Spécifiez le chemin du fichier pour la gestion des notifications
listFilePath = 'list.txt'
Système de réglage de la discorde
discordbot.py
#Remplacez par le jeton d'accès de votre bot
TOKEN = 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXX'
#Tout identifiant de chaîne(int)
CHANNEL_ID = 0000000000000000
Spécifiez la communauté à traiter comme un tableau. Prend en charge plusieurs communautés
discordbot.py
#Définissez la communauté que vous souhaitez vérifier
targetCommunitys = ['co1520016']
Déterminez si vous avez déjà été notifié à partir de l'URL de diffusion Il sert à vérifier pour éviter de notifier plusieurs fois la même émission.
discordbot.py
#Renvoie True s'il y a une recherche dans la liste et False s'il n'y en a pas
def searchList(liveURL):
#Vérification de l'existence du fichier
if not os.path.exists(listFilePath):
return False
liveLV = liveIdExtraction(liveURL)
#Vérification en dossier
with open(listFilePath) as f:
for i, line in enumerate(f):
if line == liveLV + '\n':
return True
print(line)
return False
Ajouter la diffusion notifiée à la liste
discordbot.py
#Ajouter l'identifiant de diffusion à la liste
def addList(liveURL):
liveLV = liveIdExtraction(liveURL)
with open(listFilePath, 'a') as f:
print(liveLV, file=f)
Diverses données sont acquises en grattant à partir de l'URL de diffusion
discordbot.py
#Identifiant de diffusion de l'URL de diffusion(lvXXXXXXX)Extraction
def liveIdExtraction(liveURL):
repatter = re.compile('lv[0-9]+')
return repatter.search(liveURL).group()
#Obtenir le titre de diffusion à partir de l'URL de diffusion
def getLiveTitle(liveURL):
r = requests.get(liveURL)
soup = BeautifulSoup(r.content, "html.parser")
for meta_tag in soup.find_all('meta', attrs={'property': 'og:title'}):
return meta_tag.get('content')
#Obtenez le nom du diffuseur à partir de l'URL de diffusion
def getLiveName(liveURL):
r = requests.get(liveURL)
soup = BeautifulSoup(r.content, "html.parser")
return soup.find("span",{"class":"name"}).text
Recommended Posts