[PYTHON] [LIVE] Ich habe versucht, die Sonnenauf- und -untergangszeiten jeden Tag landesweit zu liefern

Motive

Wenn ich es bemerke, bleibe ich oft abends zu Hause, also möchte ich handeln, wenn es hell ist. Tatsächlich werde ich als vorbeugende Maßnahme gegen Depressionen, die dem Winter eigen sind, die Sonnenauf- und -untergangszeiten landesweit jeden Tag aktualisieren und anzeigen.

Method

Es ist Sonnenaufgang und Sonnenuntergang, aber ich verwende Ohakon-Adresse !? API.

Es ist ein Drehbuch, aber ...

--Erstelle einen Qiita-Artikel

Teilen Sie es in zwei Teile und verwenden Sie "cron", um es gegen 12:00 Uhr laufen zu lassen.

Development

Skript zum Erstellen eines Qiita-Artikels

import requests
import datetime
from bs4 import BeautifulSoup
from collections import namedtuple
import asyncio
import os

State = namedtuple('State', ['name', 'id', 'lat', 'lng'])

#dataset
states = [
	State("Sapporo",    1, 43.06417,141.34694),
	State("Aomori Stadt",    2, 40.82444,140.74),
	State("Morioka City",    3, 39.70361,141.1525),
	State("Sendai Stadt",    4, 38.26889,140.87194),
	State("Akita City",    5, 39.71861,140.1025),
	State("Yamagata City",    6, 38.24056,140.36333),
	State("Fukushima Stadt",    7, 37.75,140.46778),
	State("Mito City",    8, 36.34139,140.44667),
	State("Utsunomiya Stadt",   9, 36.56583,139.88361),
	State("Maebashi City",    10, 36.39111,139.06083),
	State("Saitama City", 11, 35.85694,139.64889),
	State("Chiba",    12, 35.60472,140.12333),
	State("Shinjuku Station",    13, 35.68944,139.69167),
	State("Yokohama",    14, 35.44778,139.6425),
	State("Niigata City",    15, 37.90222,139.02361),
	State("Toyama City",    16, 36.69528,137.21139),
	State("Kanazawa City",    17, 36.59444,136.62556),
	State("Fukui Stadt",    18, 36.06528,136.22194),
	State("Kofu Stadt",    19, 35.66389,138.56833),
	State("Stadt Nagano",    20, 36.65139,138.18111),
	State("Gifu Stadt",    21, 35.39111,136.72222),
	State("Shizuoka Stadt",    22, 34.97694,138.38306),
	State("Nagoya Stadt",  23, 35.18028,136.90667),
	State("Tsu Stadt",     24, 34.73028,136.50861),
	State("Otsu Stadt",   25, 35.00444,135.86833),
	State("Kyoto City",   26,35.02139,135.75556),
	State("Stadt Osaka",   27,34.68639,135.52),
	State("Kobe City",   28,34.69139,135.18306),
	State("Nara City",   29,34.68528,135.83278),
	State("Wakayama City",  30, 34.22611,135.1675),
	State("Tottori Stadt",   31,35.50361,134.23833),
	State("Matsue",   32,35.47222,133.05056),
	State("Okayama City",   33,34.66167,133.935),
	State("Hiroshima Stadt",   34,34.39639,132.45944),
	State("Yamaguchi Stadt",   35,34.18583,131.47139),
	State("Tokushima Stadt",   36,34.06583,134.55944),
	State("Takamatsu Stadt",   37,34.34028,134.04333),
	State("Matsuyama Stadt",   38,33.84167,132.76611),
	State("Kochi City",   39,33.55972,133.53111),
	State("Fukuoka Stadt",   40,33.60639,130.41806),
	State("Saga City",   41,33.24944,130.29889),
	State("Nagasaki Stadt",   42,32.74472,129.87361),
	State("Kumamoto Stadt",   43,32.78972,130.74167),
	State("Oita City",   44,33.23806,131.6125),
	State("Miyazaki Stadt",   45,31.91111,131.42389),
	State("Stadt Kagoshima", 46,31.56028,130.55806),
	State("Naha City",   47,26.2125,127.68111)
]

async def get_time_sun_rise_set(year, month, day, state):
    url = 'http://labs.bitmeister.jp/ohakon/api/?'
    payload = {'mode':'sun_moon_rise_set', 'year':year, 'month':month, 'day':day, 'lat':state.lat, 'lng':state.lng}
    response = requests.get(url, params=payload)
    soup = BeautifulSoup(response.content, "html.parser")
    await asyncio.sleep(1)

    sunrise = datetime.datetime.strptime(soup.sunrise_hm.text,'%H:%M')
    sunset = datetime.datetime.strptime(soup.sunset_hm.text,'%H:%M')

    diff_seconds = (sunset - sunrise).total_seconds()
    diff_hours = int(diff_seconds // (60 * 60))
    diff_minutes = int((diff_seconds - diff_hours * (60 * 60)) / 60)

    return state.name, soup.sunrise_hm.text, soup.sunset_hm.text, "{:02d}:{:02d}".format(diff_hours, diff_minutes)

def write_session(foutobj, path):
	with open(path, "r", encoding='utf-8') as fin:
		foutobj.write(fin.read())	


if __name__ == "__main__":
	now = datetime.datetime.now()
	output = "./article.md"
	base_folder = "./templates/"

	loop = asyncio.get_event_loop()
	cors = [get_time_sun_rise_set(now.year, now.month, now.day, s) for s in states]
	result = loop.run_until_complete(
			asyncio.gather(*cors)
		)
	build_parts = ["motive.md", "method.md", "development.md", "contents.md", "future.md", "reference.md"]

	with open("./templates/contents.md", "w", encoding='utf-8') as fout:
		fout.write("# Sunrize/Sunset\n\n")
		fout.write("{}\n\n".format(datetime.datetime.now().strftime("【%Y/%m/%d %H:%Aktualisiert bei M]")))
		fout.write("|city|sunrize|sunset|hours of sunlight|\n")
		fout.write("|:--|:--|:--|:--|\n")
		for r in result:
			fout.write("|{}|{}|{}|{}|\n".format(*r))
		fout.write("\n\n")

	with open(output, "w", encoding='utf-8') as fout:
		for p in build_parts:
			write_session(fout, os.path.join(base_folder, p))

Die Zeit von Sonnenaufgang und Sonnenuntergang wird unter Verwendung der API mit "get_time_sun_rise_set ()" ausgegeben. Beim Festlegen der Anforderung ist payload = {'mode': 'sun_moon_rise_set', 'year': year, 'month': month, 'day': day, 'lat': state.lat, 'lng': state. Verwenden Sie die Parameter Datum und Breite / Länge wie in lng} .

Außerdem wird der asynchrone Prozess "asyncio" nur für den Fall verwendet, dass jede API-Erfassung stabil ist.

	loop = asyncio.get_event_loop()
	cors = [get_time_sun_rise_set(now.year, now.month, now.day, s) for s in states]
	result = loop.run_until_complete(
			asyncio.gather(*cors)
		)

Um die spätere Bearbeitung zu vereinfachen, werden die Sätze in den einzelnen Abschnitten unterteilt und schließlich aggregiert. Beim einfachen Lesen und Schreiben einer Datei war "open (path," r ")" in Ordnung, aber bei der Ausführung mit "cron" tritt ein Fehler im Zeichencode auf. Sie müssen das Argument also explizit auf "encoding =" utf-8 "setzen. (Siehe Was tun, wenn UnicodeDecodeError aufgrund von Datei-E / A auftritt)

	build_parts = ["motive.md", "method.md", "development.md", "contents.md", "future.md", "reference.md"]
	with open(output, "w", encoding='utf-8') as fout:
		for p in build_parts:
			write_session(fout, os.path.join(base_folder, p))

Aktualisieren Sie Qiita-Artikel mit API

import json
import requests

if __name__ == "__main__":
	BASE_URL = "https://qiita.com/api/v2/items/"
	TOKEN = "--Zugangstoken--"
	headers = {"Authorization": f"Bearer {TOKEN}", "Content-Type":"application/json"}

	sentence = ""
	with open("article.md", "r", encoding='utf-8') as fin:
		sentence = fin.read()

	contents = {"title": "[LIVE] Ich habe versucht, die Sonnenauf- und -untergangszeiten jeden Tag landesweit zu liefern",
				"tags": [{"name": "Python"},
						{"name":"cron"},
						{"name":"asyncio"},
						{"name":"QiitaAPI"},
						{"name":"api"}],
				"body": sentence,
				"id":"ada82beb3b747b99a05e"
				}

	res = requests.patch(BASE_URL + contents["id"], headers=headers, json=contents)
	print(res)

Für die Verwendung der Qiita-API ist Issue Access Token erforderlich, wenn die API mit "Anfragen" angefordert wird. Sie können den Inhalt mit "request.patch ({content URL}, {header}, {content content})" aktualisieren.

Sunrize/Sunset

[Aktualisiert um 01:00 am 05.06.2020]

city sunrize sunset hours of sunlight
Sapporo 3:56 19:10 15:14
Aomori Stadt 4:06 19:05 14:59
Morioka City 4:08 19:00 14:52
Sendai Stadt 4:13 18:57 14:44
Akita City 4:12 19:04 14:52
Yamagata City 4:15 18:59 14:44
Fukushima Stadt 4:16 18:57 14:41
Mito City 4:20 18:53 14:33
Utsunomiya Stadt 4:22 18:56 14:34
Maebashi City 4:26 18:59 14:33
Saitama City 4:25 18:55 14:30
Chiba 4:24 18:52 14:28
Shinjuku Station 4:25 18:54 14:29
Yokohama 4:26 18:54 14:28
Niigata City 4:21 19:03 14:42
Toyama City 4:32 19:07 14:35
Kanazawa City 4:35 19:09 14:34
Fukui Stadt 4:38 19:09 14:31
Kofu Stadt 4:30 18:59 14:29
Stadt Nagano 4:28 19:03 14:35
Gifu Stadt 4:38 19:05 14:27
Shizuoka Stadt 4:32 18:58 14:26
Nagoya Stadt 4:37 19:04 14:27
Tsu Stadt 4:40 19:04 14:24
Otsu Stadt 4:42 19:08 14:26
Kyoto City 4:43 19:08 14:25
Stadt Osaka 4:44 19:08 14:24
Kobe City 4:46 19:10 14:24
Nara City 4:43 19:07 14:24
Wakayama City 4:47 19:08 14:21
Tottori Stadt 4:47 19:16 14:29
Matsue 4:52 19:20 14:28
Okayama City 4:51 19:15 14:24
Hiroshima Stadt 4:57 19:20 14:23
Yamaguchi Stadt 5:02 19:23 14:21
Tokushima Stadt 4:50 19:10 14:20
Takamatsu Stadt 4:51 19:13 14:22
Matsuyama Stadt 4:58 19:17 14:19
Kochi City 4:55 19:13 14:18
Fukuoka Stadt 5:08 19:26 14:18
Saga City 5:09 19:25 14:16
Nagasaki Stadt 5:12 19:26 14:14
Kumamoto Stadt 5:08 19:22 14:14
Oita City 5:04 19:20 14:16
Miyazaki Stadt 5:08 19:18 14:10
Kagoshima Stadt 5:12 19:20 14:08
Naha City 5:36 19:19 13:43

Future

Wenn Sie die Sonnenauf- und -untergangszeiten landesweit ausgeben, können Sie feststellen, dass der Zeitunterschied etwa 30 bis 60 Minuten und die Sonnenscheinzeit etwa 30 bis 60 Minuten beträgt.

Reference

Recommended Posts

[LIVE] Ich habe versucht, die Sonnenauf- und -untergangszeiten jeden Tag landesweit zu liefern
Ich habe jeden Tag 13 LeetCode ausprobiert. Roman to Integer (Python, Go)
Ich habe versucht, die Zeit und die Zeit der C-Sprache zu veranschaulichen
Ich habe versucht, die Uhrzeit und das heutige Wetter anzuzeigen
Ich habe versucht, die Unterschiede zwischen Java und Python aufzuzählen
Ich habe den Chat von YouTube Live angezeigt und versucht zu spielen
Ich habe versucht, den Ball zu bewegen
Ich habe versucht, den Abschnitt zu schätzen.
Ich habe versucht, das Bild durch Klicken mit der rechten und linken Maustaste in den angegebenen Ordner zu verschieben
Ich habe versucht, den Befehl umask zusammenzufassen
Ich habe versucht, die Altersgruppe und die Ratenverteilung von Atcoder zu visualisieren
Ich versuchte das Weckwort zu erkennen
Ich versuchte, Trauer und Freude über das Problem der stabilen Ehe auszudrücken.
Ich habe versucht, die grafische Modellierung zusammenzufassen.
Ich habe versucht, das Umfangsverhältnis π probabilistisch abzuschätzen
Ich habe versucht, die Phase der Geschichte mit COTOHA zu extrahieren und zu veranschaulichen
Ich habe versucht, die COTOHA-API zu berühren
Ich habe versucht, die Beschleunigung von Python durch Cython zu verifizieren und zu analysieren
Ich habe das VGG16-Modell mit Keras implementiert und versucht, CIFAR10 zu identifizieren
Ich habe versucht, E-Mails von Node.js und Python mithilfe des E-Mail-Zustelldienstes (SendGrid) von IBM Cloud zuzustellen!
Ich habe versucht, die Netzwerkbandbreite und -verzögerung mit dem Befehl tc zu steuern
Ich habe versucht, das Update von "Hameln" mit "Beautiful Soup" und "IFTTT" zu benachrichtigen.
Ich habe versucht, das Bild zu verarbeiten und zu transformieren und die Daten für maschinelles Lernen zu erweitern
[Einführung in AWS] Ich habe versucht, eine Konversations-App zu portieren und mit text2speech @ AWS playing zu spielen
Ich habe versucht, den G-Test und die E-Qualifikation durch Training ab 50 zu bestehen
Ich habe Web Scraping versucht, um die Texte zu analysieren.
Ich habe DCGAN implementiert und versucht, Äpfel zu generieren
Ich habe versucht, beim Trocknen der Wäsche zu optimieren
Ich habe versucht, die Daten mit Zwietracht zu speichern
Ich habe versucht, die Trapezform des Bildes zu korrigieren
Qiita Job Ich habe versucht, den Job zu analysieren
LeetCode Ich habe versucht, die einfachen zusammenzufassen
[Einführung in PID] Ich habe versucht, ♬ zu steuern und zu spielen
Ich habe versucht, das Problem des Handlungsreisenden umzusetzen
Ich habe versucht, die Texte von Hinatazaka 46 zu vektorisieren!
Ich habe versucht, das Update von "Werde ein Romanautor" mit "IFTTT" und "Werde ein Romanautor API" zu benachrichtigen.
Ich habe versucht zu verstehen, wie Pandas und multiple Co-Linearität unter Verwendung des Affairs-Datensatzes als Thema verwendet werden.
Ich habe versucht, das Artikel-Update des Livedoor-Blogs mit Python und Selen zu automatisieren.
Ich habe versucht, die Syntax zu bewerten, die mit der COTOHA-API zu humorvoll und humorvoll war.
Ich habe versucht, die Verarbeitungsgeschwindigkeit mit dplyr von R und pandas von Python zu vergleichen
Ich habe versucht, die Sündenfunktion mit Chainer zu trainieren
Ich habe versucht, die in Python installierten Pakete grafisch darzustellen
Ich habe jeden Tag LeetCode ausprobiert. 7. Reverse Integer (Python, Go)
Ich habe versucht, mit VOICEROID2 2 automatisch zu lesen und zu speichern
Ich habe versucht, Iris aus dem Kamerabild zu erkennen
Ich habe versucht, DCGAN mit PyTorch zu implementieren und zu lernen
Ich habe versucht, die Grundform von GPLVM zusammenzufassen
Ich habe versucht, eine CSV-Datei mit Python zu berühren
Ich habe versucht, das Spiel in der J League vorherzusagen (Datenanalyse)
Ich habe versucht, Soma Cube mit Python zu lösen
Ich habe versucht, mit VOICEROID2 automatisch zu lesen und zu speichern
Ich habe versucht, Linux Systemaufrufe und Scheduler hinzuzufügen
Ich habe jeden Tag 20 LeetCode ausprobiert. Gültige Klammern (Python, Go)
Ich habe versucht, die Sündenfunktion mit Chainer zu approximieren