Die Saison für den Adventskalender rückt auch 2016 näher. Auch in diesem Jahr wird Nijibox Qiita verwenden, um einen Adventskalender zu erstellen. Mit dem Thema "Mein eigenes Errbot-Wissen"
Ich habe ein Bot-Skript vorbereitet, das nur an Wochentagen den Frame-Status des Adventskalenders angibt.
adventcarendar.py
from datetime import datetime
from errbot import BotPlugin, botcmd, arg_botcmd, webhook
import pytz
import requests
from bs4 import BeautifulSoup
from errcron.bot import CrontabMixin
from errcron.cronjob import CronJob
class Adventcalendar(BotPlugin, CrontabMixin):
"""
Qiita AdventCalendar
"""
#Anspruch 1:Sie können Crontab verwenden
CRONTAB = [
'30 18 * * 1,2,3,4,5 .report_calendar_members',
]
TIMEZONE = 'Asia/Tokyo'
CHANNEL = '#general' #Zum Bleichen von Qiita
CALENDAR_URL = 'http://qiita.com/advent-calendar/2016/nijibox'
def activate(self):
super().activate()
self.activate_crontab()
def report_calendar_members(self, polled_time):
"""Sprechen Sie über tägliche Frame-Informationen
"""
#Anspruch 2:Perth beim Schaben
resp = requests.get(self.CALENDAR_URL)
soup = BeautifulSoup(resp.content, 'html.parser')
items = soup.select('.adventCalendarItem')
#Anspruch 3:Trennen Sie die Anzahl der Slots und die Anzahl der Mitwirkenden
reserved = [
item
for item in items
if len(item.select('.adventCalendarItem_author')) > 0
]
authors = set([
item.select('.adventCalendarItem_author')[0].text.strip()
for item in reserved
])
if len(reserved) < 25:
message = '{}\n{}Von Menschen{}Beiträge werden veröffentlicht.\n Vielen Dank für Ihre weitere Teilnahme.'.format(
self.CALENDAR_URL,
len(authors),
len(reserved),
)
channel = self.build_identifier(self.CHANNEL)
self.send(channel, message)
Wie ich bereits geschrieben habe, hat Errbot keine Funktionen wie crontab Ich versuche eine einfache Crontab-ähnliche Operation mit dem von mir erstellten Errcron durchzuführen. aus diesem Grund,
30 18 * * 1,2,3,4,5 .report_calendar_members
Die Crontab-Notation wird unverändert verwendet. Dieses Mal ist es laut, bis in die Ferien zu reden, also habe ich es an Wochentagen auf 18:30 eingestellt, was wie eine Pause in der Nacht ist.
Diesmal stammen die Informationen im Adventskalender des Unternehmens nicht aus RSS oder API, sondern HTML wird unverändert verwendet. ~~ (RSS hat nur öffentliche Artikel, API steht nicht an erster Stelle) ~~
Für "Anfragen" können Sie eine Antwort auf einmal mit "Anfragen.get" erhalten, und da es BeautifulSoup gibt, können Sie die Nummer jedes Elements im Kalender durch einfaches "Zählen der Elemente der" AdventCalendarItem "-Klasse" erhalten. Vielen Dank an Qiita für die schöne Struktur.
Dies ist derzeit nicht der Fall, aber da ein Mitglied möglicherweise mehrere Artikel schreibt, habe ich beschlossen, ** Anzahl der Mitwirkenden ** getrennt von ** Anzahl der Beiträge ** zu berücksichtigen.
Der Inhalt des Felds ".adventCalendarItem" zeigt nur dann den Posternamenrahmen der Klasse ".adventCalendarItem_author" an, wenn der Rahmen bereits gefüllt ist. Mit anderen Worten, wenn Sie den Inhalt von "Autor" vorerst aus "Artikel" entfernen, können Sie eine Beitragsliste erstellen.
hier in der Gegend
reserved = [
item
for item in items
if len(item.select('.adventCalendarItem_author')) > 0
]
Da es mühsam ist, eine Beitragsliste ohne Duplizierung direkt aus der obigen Beitragsliste zu erstellen
Erstellen Sie eine Liste der Mitwirkenden (keine Vervielfältigung) mit.
hier in der Gegend
authors = set([
item.select('.adventCalendarItem_author')[0].text.strip()
for item in reserved
])
Nachdem wir nun eine Liste der Beiträge und eine Liste der Mitwirkenden haben, müssen wir nur noch auf dieser Grundlage Beiträge an Slack senden. Da es sich um eine Standardfunktion von Errbot handelt, ist diesmal eine ausführliche Erklärung erforderlich.
Ich hoffe, dass dies unseren Kalender lebendig macht.
Recommended Posts