La saison du calendrier de l'Avent approche également en 2016. Cette année également, Nijibox utilisera Qiita pour faire un calendrier de l'Avent. Avec le thème de "ma propre connaissance Errbot"
J'ai préparé un script Bot qui indique uniquement l'état du cadre du calendrier de l'Avent en semaine.
--Utilisez Errbot à votre guise --Errbot, qui a des fonctions indescriptibles, est déjà en cours d'exécution, alors créez simplement un plug-in.
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
"""
#Réclamation 1:Vous pouvez utiliser crontab
CRONTAB = [
'30 18 * * 1,2,3,4,5 .report_calendar_members',
]
TIMEZONE = 'Asia/Tokyo'
CHANNEL = '#general' #Pour le blanchiment 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):
"""Parlez des informations de trame quotidiennes
"""
#Réclamation 2:Perth lors du grattage
resp = requests.get(self.CALENDAR_URL)
soup = BeautifulSoup(resp.content, 'html.parser')
items = soup.select('.adventCalendarItem')
#Réclamation 3:Séparez le nombre d'emplacements et le nombre de contributeurs
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{}Par les gens{}Les messages seront publiés.\n Merci pour votre participation continue.'.format(
self.CALENDAR_URL,
len(authors),
len(reserved),
)
channel = self.build_identifier(self.CHANNEL)
self.send(channel, message)
Comme je l'ai écrit plus tôt, Errbot n'a pas de fonctionnalités comme crontab, donc J'essaye de faire une simple opération de type Crontab en utilisant mon propre ʻerr cron`. pour cette raison,
30 18 * * 1,2,3,4,5 .report_calendar_members
La notation crontab est utilisée telle quelle. Cette fois, c'est bruyant de parler jusqu'aux vacances, donc je l'ai réglé à 18h30 en semaine, ce qui est comme une pause dans la nuit.
Cette fois, les informations du calendrier de l'Avent de l'entreprise ne proviennent pas de RSS ou d'API, mais HTML est utilisé tel quel. ~~ (RSS ne contient que des articles publics, l'API n'est pas en premier lieu) ~~
Pour les requests
, vous pouvez obtenir une réponse en une seule fois avec requests.get
, et comme il y a BeautifulSoup, vous pouvez obtenir le nombre de chaque élément du calendrier par le simple moyen de" compter les éléments de la classe ʻadventCalendarItem` ".
Merci à Qiita pour sa belle structure.
Ce n'est pas le cas actuellement, mais comme un membre peut écrire plusieurs articles, j'ai décidé de considérer le ** nombre de contributeurs ** séparément du ** nombre de publications **.
Le contenu de la boîte .adventCalendarItem
affichera uniquement le cadre du nom de l'affiche de la classe .adventCalendarItem_author
si le cadre est déjà rempli.
En d'autres termes, si vous retirez le contenu de ʻauthor de ʻItem
pour le moment, vous pouvez créer une liste d'articles.
dans les environs
reserved = [
item
for item in items
if len(item.select('.adventCalendarItem_author')) > 0
]
Puisqu'il est difficile de créer une liste de contributeurs sans duplication directement de la liste de publication ci-dessus
Préparez une liste de contributeurs (pas de duplication) au moyen de.
dans les environs
authors = set([
item.select('.adventCalendarItem_author')[0].text.strip()
for item in reserved
])
Maintenant que nous avons une liste de publications et une liste de contributeurs, tout ce que nous avons à faire est de publier sur Slack en fonction de cela. Puisqu'il s'agit d'une fonction standard d'Errbot, une explication détaillée est une passe cette fois.
J'espère que cela rendra notre calendrier vivant.
Recommended Posts