天気の情報をスクレイピングして表示したい!と考えた筆者

しかし、スクレイピングしたとて一つのページでしか表示ができず、残念に思っていた今日この頃

ある日、全てのページに共通させてカテゴリ一覧を表示するという神機能を知った

URL: https://blog.narito.ninja/detail/150

これを参考に作ってみた

Blogのアプリがあったので、その下にcontext_processors.pyを作成し、中身を書き書き


def common_weather(request):
    context = {}
    url_forecast = 'https://tenki.jp/forecast/3/16/4410/13208/'
    fdict = scrape_weather(url_forecast)
    forecast = fdict["today"]["forecasts"][0]
    context["weather"] = "天気: "+forecast["weather"]
    context["temp_high"] = "最高気温: "+forecast["high_temp"]
    context["temp_low"] = "最低気温: "+forecast["low_temp"]
    context["rain_probability"] = "降水確率: "
    context["rain_probability_0006"] = "00-06: "+forecast["rain_probability"]['00-06'] 
    context["rain_probability_0612"] = "06-12: "+ forecast["rain_probability"]['06-12']
    context["rain_probability_1218"] = "12-18: "+ forecast["rain_probability"]['12-18']
    context["rain_probability_1824"] = "18-24: "+ forecast["rain_probability"]['18-24']
    return context


天気の情報はtenki.jpからスクレイピングしている

scrape_weatherの中身は本題ではないのでスルー

そしてこの関数をsettings.pyに追加した


TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'DIRS': ['templates'],
        'APP_DIRS': True,
        'OPTIONS': {
            'context_processors': [
                'django.template.context_processors.debug',
                'django.template.context_processors.request',
                'django.contrib.auth.context_processors.auth',
                'django.contrib.messages.context_processors.messages',
                'blog.context_processors.common', 
                'blog.context_processors.common_weather', 
            ],
        },
    },
]

実際に表示してみると。。。


できた!!!