Motive
Quand je le remarque, je reste souvent à la maison le soir, donc je veux agir quand il fait beau. En fait, à titre préventif contre la dépression propre à l'hiver, je mettrai à jour et afficherai quotidiennement les heures de lever et de coucher du soleil dans tout le pays.
Method
C'est le lever et le coucher du soleil, mais j'utilise l 'adresse Ohakon!? API.
C'est un script, mais ...
--Créer un article Qiita
--Mettre à jour les articles Qiita à l'aide de l'API
Divisez-le en deux parties et utilisez cron
pour le configurer pour qu'il s'exécute vers midi.
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("Ville d'Aomori", 2, 40.82444,140.74),
State("Ville de Morioka", 3, 39.70361,141.1525),
State("Ville de Sendai", 4, 38.26889,140.87194),
State("Ville d'Akita", 5, 39.71861,140.1025),
State("Ville de Yamagata", 6, 38.24056,140.36333),
State("Ville de Fukushima", 7, 37.75,140.46778),
State("Mito City", 8, 36.34139,140.44667),
State("Ville d'Utsunomiya", 9, 36.56583,139.88361),
State("Ville de Maebashi", 10, 36.39111,139.06083),
State("Ville de Saitama", 11, 35.85694,139.64889),
State("Chiba", 12, 35.60472,140.12333),
State("Quartier Shinjuku", 13, 35.68944,139.69167),
State("Yokohama", 14, 35.44778,139.6425),
State("Ville de Niigata", 15, 37.90222,139.02361),
State("Toyama City", 16, 36.69528,137.21139),
State("Ville de Kanazawa", 17, 36.59444,136.62556),
State("Ville de Fukui", 18, 36.06528,136.22194),
State("Ville de Kofu", 19, 35.66389,138.56833),
State("Ville de Nagano", 20, 36.65139,138.18111),
State("Ville de Gifu", 21, 35.39111,136.72222),
State("Ville de Shizuoka", 22, 34.97694,138.38306),
State("Ville de Nagoya", 23, 35.18028,136.90667),
State("Ville de Tsu", 24, 34.73028,136.50861),
State("Ville d'Otsu", 25, 35.00444,135.86833),
State("Ville de Kyoto", 26,35.02139,135.75556),
State("Ville d'Osaka", 27,34.68639,135.52),
State("Ville de Kobe", 28,34.69139,135.18306),
State("Nara City", 29,34.68528,135.83278),
State("Ville de Wakayama", 30, 34.22611,135.1675),
State("Ville de Tottori", 31,35.50361,134.23833),
State("Matsue", 32,35.47222,133.05056),
State("Okayama City", 33,34.66167,133.935),
State("Ville d'Hiroshima", 34,34.39639,132.45944),
State("Ville de Yamaguchi", 35,34.18583,131.47139),
State("Ville de Tokushima", 36,34.06583,134.55944),
State("Ville de Takamatsu", 37,34.34028,134.04333),
State("Ville de Matsuyama", 38,33.84167,132.76611),
State("Ville de Kochi", 39,33.55972,133.53111),
State("Ville de Fukuoka", 40,33.60639,130.41806),
State("Saga City", 41,33.24944,130.29889),
State("Ville de Nagasaki", 42,32.74472,129.87361),
State("Ville de Kumamoto", 43,32.78972,130.74167),
State("Ville d'Oita", 44,33.23806,131.6125),
State("Ville de Miyazaki", 45,31.91111,131.42389),
State("Ville de 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:%Mis à jour à 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))
L'heure du lever et du coucher du soleil est sortie en utilisant l'API avec get_time_sun_rise_set ()
. Lors de la définition de la requête, payload = {'mode': 'sun_moon_rise_set', 'year': year, 'month': month, 'day': day, 'lat': state.lat, 'lng': state. Utilisez les paramètres de date et de latitude / longitude comme dans lng}
.
De plus, afin d'obtenir chaque acquisition d'API de manière stable, le traitement asynchrone ʻasyncio` est utilisé au cas où.
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)
)
De plus, pour faciliter la modification ultérieure, les phrases de chaque section sont divisées et finalement agrégées.
Lors de la simple lecture et écriture d'un fichier, ʻopen (chemin, 'r') était bien, mais lors de l'exécution avec
cron, une erreur se produit dans le code de caractère. Vous devez donc définir explicitement ʻencoding = 'utf-8'
dans l'argument. (Reportez-vous à Que faire lorsque UnicodeDecodeError se produit en raison d'E / S de fichier)
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 = "--Jeton d'accès--"
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": "[EN DIRECT] J'ai essayé de fournir les heures de lever et de coucher du soleil dans tout le pays chaque jour",
"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)
Issue Access Token est requis pour utiliser l'API Qiita, et est requis lors de la demande de l'API avec des requests
.
Vous pouvez mettre à jour le contenu avec requests.patch ({content URL}, {header}, {content content})
.
Sunrize/Sunset
[Mis à jour à 01:00 le 05/06/2020]
city | sunrize | sunset | hours of sunlight |
---|---|---|---|
Sapporo | 3:56 | 19:10 | 15:14 |
Ville d'Aomori | 4:06 | 19:05 | 14:59 |
Ville de Morioka | 4:08 | 19:00 | 14:52 |
Ville de Sendai | 4:13 | 18:57 | 14:44 |
Ville d'Akita | 4:12 | 19:04 | 14:52 |
Ville de Yamagata | 4:15 | 18:59 | 14:44 |
Ville de Fukushima | 4:16 | 18:57 | 14:41 |
Mito City | 4:20 | 18:53 | 14:33 |
Ville d'Utsunomiya | 4:22 | 18:56 | 14:34 |
Ville de Maebashi | 4:26 | 18:59 | 14:33 |
Ville de Saitama | 4:25 | 18:55 | 14:30 |
Chiba | 4:24 | 18:52 | 14:28 |
Quartier Shinjuku | 4:25 | 18:54 | 14:29 |
Yokohama | 4:26 | 18:54 | 14:28 |
Ville de Niigata | 4:21 | 19:03 | 14:42 |
Toyama City | 4:32 | 19:07 | 14:35 |
Ville de Kanazawa | 4:35 | 19:09 | 14:34 |
Ville de Fukui | 4:38 | 19:09 | 14:31 |
Ville de Kofu | 4:30 | 18:59 | 14:29 |
Ville de Nagano | 4:28 | 19:03 | 14:35 |
Ville de Gifu | 4:38 | 19:05 | 14:27 |
Ville de Shizuoka | 4:32 | 18:58 | 14:26 |
Ville de Nagoya | 4:37 | 19:04 | 14:27 |
Ville de Tsu | 4:40 | 19:04 | 14:24 |
Ville d'Otsu | 4:42 | 19:08 | 14:26 |
Ville de Kyoto | 4:43 | 19:08 | 14:25 |
Ville d'Osaka | 4:44 | 19:08 | 14:24 |
Ville de Kobe | 4:46 | 19:10 | 14:24 |
Nara City | 4:43 | 19:07 | 14:24 |
Ville de Wakayama | 4:47 | 19:08 | 14:21 |
Ville de Tottori | 4:47 | 19:16 | 14:29 |
Matsue | 4:52 | 19:20 | 14:28 |
Okayama City | 4:51 | 19:15 | 14:24 |
Ville d'Hiroshima | 4:57 | 19:20 | 14:23 |
Ville de Yamaguchi | 5:02 | 19:23 | 14:21 |
Ville de Tokushima | 4:50 | 19:10 | 14:20 |
Ville de Takamatsu | 4:51 | 19:13 | 14:22 |
Ville de Matsuyama | 4:58 | 19:17 | 14:19 |
Ville de Kochi | 4:55 | 19:13 | 14:18 |
Ville de Fukuoka | 5:08 | 19:26 | 14:18 |
Saga City | 5:09 | 19:25 | 14:16 |
Ville de Nagasaki | 5:12 | 19:26 | 14:14 |
Ville de Kumamoto | 5:08 | 19:22 | 14:14 |
Ville d'Oita | 5:04 | 19:20 | 14:16 |
Ville de Miyazaki | 5:08 | 19:18 | 14:10 |
Ville de Kagoshima | 5:12 | 19:20 | 14:08 |
Naha City | 5:36 | 19:19 | 13:43 |
Future
Si vous indiquez les heures de lever et de coucher du soleil dans tout le pays, vous pouvez voir que le décalage horaire est d'environ 30 à 60 minutes et que le temps d'ensoleillement est d'environ 30 à 60 minutes.
Reference
Recommended Posts