1/30 Nachschrift Es wurde abgeschlossen [Abgeschlossen] Bot, der eine Benachrichtigung über den Start der Live-Übertragung von Nico Nico an Discord auf discord.py sendet
Dies ist Qiitas erster Beitrag. Mein Name ist Ryo, auch bekannt als fctokyo1016. Twitter → @ fctokyo1016 Ich entwickle normalerweise mit PHP. Es ist ein Code, der von einem Amateur erstellt wurde, der seit mehreren Jahren Ingenieur ist. Ich hoffe, Sie können ihn übersehen.
――Niko Niko Live-Übertragung Planungsteam, zu dem etwa 10 Personen gehören, von denen jeder frei in derselben Community live übertragen kann ――Da die Warnung von Nico Nama aufgrund der Spezifikationsänderung nicht mehr verwendet werden kann, ist es schwierig, die URL zu finden, wenn Sie die Sendung anderer Mitglieder ansehen. ――Ist es nicht einfacher, wenn eine Benachrichtigung an den Discord-Server gesendet wird, der alle Mitglieder enthält?
――Wie oben erwähnt, unterstützen aufgrund von Änderungen in den Warnspezifikationen von Nico Live weder RSS noch API die Übertragung von Live-Benutzern.
»Kannst du Schaben verwenden, das du in der Vergangenheit ein wenig berührt hast? ――Ich wollte nur Python lernen
Die Sendung unserer Mitglieder wurde tatsächlich benachrichtigt
discordbot.py
import requests
import os.path
import re
import discord
import asyncio
from bs4 import BeautifulSoup
#Geben Sie den Dateipfad für die Benachrichtigungsverwaltung an
listFilePath = 'list.txt'
#Ersetzen Sie durch den Zugriffstoken Ihres Bots
TOKEN = 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXX'
#Beliebige Kanal-ID(int)
CHANNEL_ID = 0000000000000000
#Legen Sie die Community fest, die Sie überprüfen möchten
targetCommunitys = ['co1520016']
#Gibt True zurück, wenn die Liste eine Suche enthält, und False, wenn keine vorhanden ist
def searchList(liveURL):
#Überprüfung der Dateiexistenz
if not os.path.exists(listFilePath):
return False
liveLV = liveIdExtraction(liveURL)
#In-File-Prüfung
with open(listFilePath) as f:
for i, line in enumerate(f):
if line == liveLV + '\n':
return True
print(line)
return False
#Fügen Sie der Liste die Broadcast-ID hinzu
def addList(liveURL):
liveLV = liveIdExtraction(liveURL)
with open(listFilePath, 'a') as f:
print(liveLV, file=f)
#Broadcast-ID von der Broadcast-URL(lvXXXXXXX)Extraktion
def liveIdExtraction(liveURL):
repatter = re.compile('lv[0-9]+')
return repatter.search(liveURL).group()
#Ruft den Broadcast-Titel von der Broadcast-URL ab
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')
#Rufen Sie den Namen des Senders von der Broadcast-URL ab
def getLiveName(liveURL):
r = requests.get(liveURL)
soup = BeautifulSoup(r.content, "html.parser")
return soup.find("span",{"class":"name"}).text
#Generieren Sie die für die Verbindung benötigten Objekte
client = discord.Client()
#Verarbeitung, die beim Start ausgeführt wird
@client.event
async def on_ready():
while(True):
#Wiederholen Sie diesen Vorgang für die Anzahl der Zielgemeinschaften
for targetCommunity in targetCommunitys:
#URL festlegen
r = requests.get("https://com.nicovideo.jp/community/" + targetCommunity)
#Überprüfen Sie die Community-TOP-Seite
soup = BeautifulSoup(r.content, "html.parser")
result = soup.find("section", "now_live")
#Wenn die Sendung gestartet wurde
if result is not None:
#Broadcast-URL abrufen
liveURL = result.find("a", "now_live_inner").get("href")
#Durchsuchen Sie die Liste und verarbeiten Sie sie nicht, wenn die Broadcast-ID bereits verarbeitet wurde
if searchList(liveURL) is False:
#Holen Sie sich den Titel der Sendung
liveTitle = getLiveTitle(liveURL)
#Holen Sie sich den Namen des Senders
liveName = getLiveName(liveURL)
#An Zwietracht senden
channel = client.get_channel(CHANNEL_ID)
await channel.send('@everyone ' + liveName + 'Hat mit der Lieferung begonnen\n\n' + liveTitle + '\n' + liveURL)
#Broadcast ID Postscript
addList(liveURL)
#Warte 1 Minute
await asyncio.sleep(60)
#Stellen Sie eine Verbindung zu Discord her
client.run(TOKEN)
--Scraping der Community-Seite von Nico Nico Live Broadcast, um die Broadcast-URL zu erhalten
Geben Sie den Dateinamen der Textdatei an, die die Übertragung nach der Verarbeitung verlässt. wie es Dir gefällt
discordbot.py
#Geben Sie den Dateipfad für die Benachrichtigungsverwaltung an
listFilePath = 'list.txt'
Discord-Einstellsystem
discordbot.py
#Ersetzen Sie durch den Zugriffstoken Ihres Bots
TOKEN = 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXX'
#Beliebige Kanal-ID(int)
CHANNEL_ID = 0000000000000000
Geben Sie die Community an, die als Array verarbeitet werden soll. Unterstützt mehrere Communities
discordbot.py
#Legen Sie die Community fest, die Sie überprüfen möchten
targetCommunitys = ['co1520016']
Stellen Sie fest, ob Sie bereits über die Broadcast-URL benachrichtigt wurden Es dient zur Überprüfung, um zu verhindern, dass dieselbe Sendung mehrmals benachrichtigt wird.
discordbot.py
#Gibt True zurück, wenn die Liste eine Suche enthält, und False, wenn keine vorhanden ist
def searchList(liveURL):
#Überprüfung der Dateiexistenz
if not os.path.exists(listFilePath):
return False
liveLV = liveIdExtraction(liveURL)
#In-File-Prüfung
with open(listFilePath) as f:
for i, line in enumerate(f):
if line == liveLV + '\n':
return True
print(line)
return False
Fügen Sie die benachrichtigte Sendung zur Liste hinzu
discordbot.py
#Fügen Sie der Liste die Broadcast-ID hinzu
def addList(liveURL):
liveLV = liveIdExtraction(liveURL)
with open(listFilePath, 'a') as f:
print(liveLV, file=f)
Verschiedene Daten werden durch Scraping von der Broadcast-URL erfasst
discordbot.py
#Broadcast-ID von der Broadcast-URL(lvXXXXXXX)Extraktion
def liveIdExtraction(liveURL):
repatter = re.compile('lv[0-9]+')
return repatter.search(liveURL).group()
#Ruft den Broadcast-Titel von der Broadcast-URL ab
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')
#Rufen Sie den Namen des Senders von der Broadcast-URL ab
def getLiveName(liveURL):
r = requests.get(liveURL)
soup = BeautifulSoup(r.content, "html.parser")
return soup.find("span",{"class":"name"}).text
Recommended Posts