Last active
August 23, 2019 12:08
-
-
Save Tetsuya-Minase/507c468d155ad4e68df2177602e9f6ac to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import { ScrapingService } from '../../domain/service/scraping-service'; | |
import { ConverterService } from '../../domain/service/converter-service'; | |
import { WeatherNewsService } from '../weather-news-service'; | |
import { InformSlackService } from '../../domain/service/inform-slack-service'; | |
import { injectable, inject } from 'inversify'; | |
import { TYPES } from '../../inversify.types'; | |
import { WEATHER_FORECAST_AT_TOKYO } from '../../config/constant'; | |
import 'reflect-metadata'; | |
@injectable() | |
export class WeatherNewsServiceImpl implements WeatherNewsService { | |
private _scrapingService: ScrapingService; | |
private _converterService: ConverterService; | |
private _informSlackService: InformSlackService; | |
private weatherNewsUrl = WEATHER_FORECAST_AT_TOKYO; | |
constructor( | |
@inject(TYPES.ScrapingService) scrapingService: ScrapingService, | |
@inject(TYPES.ConverterService) converterService: ConverterService, | |
@inject(TYPES.InformSlackService) informSlackService: InformSlackService | |
) { | |
this._scrapingService = scrapingService; | |
this._converterService = converterService; | |
this._informSlackService = informSlackService; | |
} | |
public async informTodayWeatherInfo() { | |
const domData = await this._scrapingService.fetchDomData( | |
this.weatherNewsUrl | |
); | |
const indexList = domData.window.document.querySelectorAll( | |
'.indexList_item' | |
); | |
const indexDataList: Array< | |
Array<string> | |
> = this._converterService.domDataFormatter(indexList); | |
const pictList = domData.window.document.querySelectorAll('.pict'); | |
const pictDataList: Array< | |
Array<string> | |
> = this._converterService.domDataFormatter(pictList); | |
const temperatureList = domData.window.document.querySelectorAll('.temp'); | |
const temperatureDataList: Array< | |
Array<string> | |
> = this._converterService.domDataFormatter(temperatureList); | |
const detailData = this._converterService.list2TodayDetailInformation( | |
indexDataList, | |
pictDataList, | |
temperatureDataList | |
); | |
const informMessage = `${detailData['date']}の天気\n天気:${ | |
detailData['weather'] | |
}\n最高気温:${detailData['maxTemperature']}/最低気温:${ | |
detailData['minTemperature'] | |
}\n洗濯:${detailData['washing']}\n傘:${detailData['umbrella']}\n紫外線:${ | |
detailData['uvLight'] | |
}\n重ね着:${detailData['layering']}\n熱中症:${ | |
detailData['heatstroke'] | |
}\nビール:${detailData['beer']}`; | |
await this._informSlackService.informMessage(informMessage); | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment