Dieser Artikel wurde für SFC-Studenten der Keio University geschrieben. Ich werde versuchen, die Technologie auf leicht verständliche Weise zu erklären, aber bitte beachten Sie, dass die Erklärung des Sportunterrichtssystems selbst weggelassen wird.
`Darüber hinaus sind wir nicht verantwortlich für Schäden, die durch das unter Bezugnahme auf diesen Artikel erstellte Programm verursacht werden. Machen Sie es daher bitte auf eigenes Risiko, wenn Sie ein ähnliches System erstellen. ``
Da es sich um eine Beta-Version handelt, veröffentliche ich sie mit unendlichen Verbesserungen.
Ich möchte schnell reservieren, wenn in der Klasse, die ich mit dem Reservierungssystem für Sportunterricht von SFC belegen möchte, eine Stelle frei ist.
Es gibt keine Seite im Sportunterrichtssystem, die die Nutzungsbedingungen beschreibt, sondern Nutzungsbedingungen der Keio University Site. Beachten Sie Folgendes in Bezug auf HTML). ** ・ Geben Sie keine Informationen auf der Website an die Öffentlichkeit weiter ** ** ・ Es steht Ihnen frei, einen Link zum Reservierungssystem für den Sportunterricht zu erstellen. Wenn Sie den Link jedoch in ein Site-Element wie ein Bild aufnehmen, geben Sie ihn an. ** ** ・ Übermäßiger Zugriff unterliegt BAN, daher Anfrage im Rahmen des gesunden Menschenverstandes **
・ MacOS Catalina 10.15.5 ・ Python 3.8.0
Wenn Sie die Verwendung von Xpath nicht verstehen, lesen Sie diesen Artikel → Zusammenfassung der Verwendung von Xpath.
`pip ~`
*https://notify-bot.line.me/ja/ Melden Sie sich von der oben genannten Website aus bei Ihrem LINE-Konto an und klicken Sie auf den Schalter oben rechts, um zu Meine Seite zu gelangen Am unteren Bildschirmrand befindet sich eine Schaltfläche (siehe unten). Klicken Sie also darauf, um ein Zugriffstoken zu erhalten.
・ Main.py (Ausführungsdatei) ・ Secrets.yaml (eine Datei, die vertrauliche Informationen sammelt)
main.py
import requests
import yaml
from lxml import html
from bs4 import BeautifulSoup
import time
#Da unsichereRequestWarning laut ist, löschen Sie sie
import urllib3
from urllib3.exceptions import InsecureRequestWarning
urllib3.disable_warnings(InsecureRequestWarning)
#Lesen Sie vertrauliche Informationen aus einer anderen Datei
SECREATS = yaml.load(open('secrets.yaml').read(),Loader=yaml.SafeLoader)
def checkTargetClass(targetClass: str):
'''
Melden Sie sich an und senden Sie den Reservierungslink für die angegebene Lektion zurück, wenn Platz verfügbar ist
'''
PE_SYSTEM_URL = 'https://wellness.sfc.keio.ac.jp/v3/'
#Starten Sie eine Sitzung
session = requests.session()
#Einloggen
login_info = {
'login':SECREATS['user'],
'password':SECREATS['pass'],
'submit':'login',
'page':'top',
'lang':'ja',
'mode':'login',
'semester':'20205'
}
#Login-Ausführung
res = session.post(PE_SYSTEM_URL, data=login_info, verify=False)
res.raise_for_status() #Wenn ein Fehler auftritt, lösen Sie hier eine Ausnahme aus
#Analysieren Sie in einem Format, das von Xpath durchsucht werden kann
soup_parsed_data = BeautifulSoup(res.text, 'html.parser')
lxml_coverted_data = html.fromstring(str(soup_parsed_data))
#Linkerkennung für Reservierungsseiten&Bewegung
reservePageTag = lxml_coverted_data.xpath('//*[@id="sidenav"]/ul/li[4]/a')
reservePageLink = reservePageTag[0].get('href')
res = session.get(PE_SYSTEM_URL+reservePageLink)
res.raise_for_status()
#Perth
soup_parsed_data = BeautifulSoup(res.text, 'html.parser')
lxml_coverted_data = html.fromstring(str(soup_parsed_data))
#Erhalten Sie eine Liste der verfügbaren Klassen und einen Link zur Reservierungsbestätigungsseite
targetElemChunk = lxml_coverted_data.xpath('//*[@id="maincontents"]/div[6]/table/tbody/tr')
classInfoList = []
for classInfoRow in targetElemChunk:
className = classInfoRow[7].text
reseveConfirmPageLink = classInfoRow[9].find('a').get('href')
if targetClass in className:
notify(className+PE_SYSTEM_URL+reseveConfirmPageLink)
classInfo = [className, reseveConfirmPageLink]
classInfoList.append(classInfo)
def watch():
while True:
checkTargetClass('Ernährungswissenschaft')
time.sleep(1800)
#Benachrichtigung senden
def notify(message):
LINE_NOTIFY_URL = 'https://notify-api.line.me/api/notify'
TOKEN = SECREATS['notify-token']
headers = {'Authorization': f'Bearer {TOKEN}'}
data = {'message': f'message: {message}'}
requests.post(LINE_NOTIFY_URL, headers = headers, data = data)
def main():
watch()
if __name__ == "__main__":
main()
secrets.yaml
user: 'Anmelde-ID'
pass: 'Passwort'
notify-token: 'Von der LINE-API ausgegebenes Token'
Führen Sie `` `python main.py``` über die Befehlszeile aus und lassen Sie es so wie es ist
・ Ich möchte die Datei auf den Server verschieben, da es unpraktisch ist, sie dauerhaft zu belassen. ・ Ich möchte daraus eine Webanwendung machen und sie mit der GUI betreiben ・ Ich stelle die Zugriffsfrequenz alle 1800 Sekunden ein, aber es kann möglich sein, das Intervall etwas zu verkürzen. ・ Wenn Sie den Zeitpunkt ermitteln können, zu dem Stornierungen häufig auftreten, können Sie dies möglicherweise ertragen, indem Sie nur während dieser Zeit häufig darauf zugreifen.
Recommended Posts