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
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))
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