WindowsのSchedulerを使ってslackに最新記事を定期的に通知させてみた

こんにちは、Takaです。
今回はWindowsのSchedularを使って、定期的にslackにスクレイピングした記事を通知するプログラムを作成したのでアウトプットしようと思います。

#環境
windows10
python 3.7.2
selenium 3.141.0
#スクレイピング
今回はAIに関する記事をスクレイピングしたかったので。[AI+](https://www.itmedia.co.jp/news/subtop/aiplus/)のサイトをスクレイピングしました。
しかしながら、javascriptで書かれた動的なサイトだったので、BeautifulSoupではスクレイピングできないと判断しました。そこで今回は**Selenium**を使ってスクレイピングを試みました。
seleniumを使うことで、一定時間たった後のサイトをスクレイピングすることができます。

seleniumをインストールしていない方はコマンドラインから

```python
pip install selenium
```
と入力すればインストールできます。
Anacondaであればcondaに変えてもインストール可能です。（もちろんpipも可能）

また、Webブラウザーの代わりとしてWebDriverというものが必要になります。
WebDriverは最新のものであればほぼすべてのブラウザに対応しているので、自分が使っているブラウザに合わせてインストールしてください。
私はChromeなのでChromedriverをインストールしました。
Chromedriverのインストールですが、まず[こちらのサイト](https://sites.google.com/a/chromium.org/chromedriver/home)にアクセスしてもらい、All versions available in Downloadsをクリックします。
<img width="796" alt="2019-04-25 (3).png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/324574/b2bae29d-ac71-551e-7ddc-da8341af422f.png">
そして、一番上にあるChromeDriver 74.0.3729.6をクリック
<img width="732" alt="2019-04-25 (4).png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/324574/22e368ec-3dc1-9de7-128f-ea81e0186a7c.png">
そうすると、下のようなサイトに移るので、自分のosと同じものをクリックしてダウンロードすれば完了です。
<img width="584" alt="2019-04-25 (5).png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/324574/2b7cb68d-aaac-bfaf-7f35-f8f515e8537b.png">
以上でseleniumを使う準備は整いました。

#slack
slackで通知を送るAppを作成します。
まず、slackのincoming Webhookを作成します。そしてそのURLを取得する必要があります。取得方法は[こちらのサイト](https://tmegane.hatenablog.com/entry/2018/10/12/114037)を参考にしてください。
取得したURLはpythonのコード上で使用するので、どこでもいいので記録してください！

次にslackに通知を送るライブラリをインストールします。
これは

```python
pip install slackweb
```
でインストールできます。
使い方としては

```python
import slackweb
slack = slackweb.Slack(url="incoming webhookのURL")
slack.notify("こんにちは")
```
とすれば、slack上で「こんにちは」とAppが発しているのがわかると思います。

#コード
以下が今回実装するコードになります。

```python
import slackweb
from selenium import webdriver
slack = slackweb.Slack(url="incoming webhookのURL")

url = "https://www.itmedia.co.jp/news/subtop/aiplus/"
href_list = []
#chromedriverをC直下に置いてあります。
driver = webdriver.Chrome('C:\chromedriver.exe')
#暗黙的待機を設定
driver.implicitly_wait(5) #5秒待機後にスクレイピングする

driver.get(url)

#id = new_Articleを取得
for quote in driver.find_elements_by_id("newArticle"):
    #aタグを取得
    for i in quote.find_elements_by_tag_name("a"):
        href = i.get_attribute("href")
        href_list.append(href)

href_list = list(set(href_list))

for href in href_list:
    slack.notify(text=href)

input("Press ENTER to close the automated browser")
driver.quit()
```
#Task Scheduler
それでは、作ったコードを定期的に実行するためにTask Schedulerを使ってみましょう。
Task Schedulerは、まずWindowsのコントロールパネルを起動します。
<img width="285" alt="2019-04-26.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/324574/a0da1b31-06fe-10c4-23b0-6d2602591fe8.png">
次に、システムとセキュリティを開きます。
<img width="576" alt="2019-04-26 (1).png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/324574/eafa9807-416f-aca8-42cb-d0bdc1f090ad.png">
開いたら、管理ツールのタスクのスケジュールを開きます。
<img width="573" alt="2019-04-26 (2).png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/324574/f6748ca1-f363-28ef-3ee1-0f0f24ccba51.png">
タイムスケジューラーを開くことができました。左上にある**操作**をクリックし、基本タスクの作成をクリックします。
<img width="589" alt="2019-04-26 (11).png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/324574/ce17a520-7247-5f6a-2d6c-dcf27e43462a.png">
ここに、プログラムの名前と説明を入力します。
<img width="522" alt="2019-04-26 (6).png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/324574/9bfc28f7-dfb6-bade-1fcd-898a34339c5d.png">
次にどのくらいの頻度で行うかをチェック
<img width="522" alt="2019-04-26 (7).png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/324574/c61a1d99-7e3d-8651-c299-db18d7027aa5.png">
いつから始めるかを決めます
<img width="522" alt="2019-04-26 (9).png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/324574/6e9eaa0a-cf6d-4bf4-7599-8a678b8089a7.png">
今回は、自分で書いたプログラムを定期的に実行したいので**プログラムの開始**をチェックします。
<img width="522" alt="2019-04-26 (10).png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/324574/3ac58128-5632-d59f-07f2-e87cfc521b98.png">
最後にこちらの画面ですが、注意が必要です。
<img width="522" alt="2019-04-26 (12).png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/324574/60222346-63d4-dfa6-bf56-9d418d13db76.png">
まず、pythonで書かれたコードを実行する場合**プログラム/スクリプト**の部分にpython.exeのパスを打ち込みます。これはAnacondaに搭載背れているpython.exeでもいいです。わからなければwindowsボタンからpython.exeと検索すれば出てくるはずです。
次に、**引数の追加**では実行するファイルの名前だけ入力します。この時、パスは入力しなくて大丈夫です。
最後の**開始**の部分に実行するファイルのパスを入力します。
画面は少し違いますが、僕の場合はこのようになりました。<img width="340" alt="2019-04-26 (13).png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/324574/b5c939af-ccda-69cc-d38e-2b75370e54a6.png">
これで完了です。
このプログラムを実行するとslackに新着記事が送られます。
<img width="365" alt="2019-04-26 (14).png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/324574/61eb8a11-b30a-d43a-c5d3-2df44d32063a.png">
#まとめ
今回は、簡易的なbotを作ってみました。Task Schedulerのネックは僕がインターネットに接続していないと起動しないことです笑
まだまだ改善の余地があるので、今度は違う形でbotを作成してみようと思います。
#参考
https://121ware.com/qasearch/1007/app/servlet/relatedqa?QID=020402
[#WindowsタスクスケジューラでPythonを走らせる](https://qiita.com/kawa-Kotaro/items/4005a43eb686eae41448)