【キノカレッジ|業務効率化クラス|22年12月(1)】pythonでLineやメールを自動投稿してみよう

■ 本講座を受講してできるようになること

  • pythonで作成したテキストや画像をLineやGmailで送ることができるようになります
  • 単純な操作が自動化されて時間の抽出、業務効率化ができます
  • 自動化の考え方が身につき、自身で応用したコンテンツを作りDX人材の素養を身につけることができます

■ 課題のテーマ
第1回目:pythonでLineに自動投稿してみよう

  • Line notifyを使ってテキストを送信できるようになる
  • Line notifyを使って画像を送信できるようになる
  • データを加工してLineに通知ができるようになる
  • webサイトのスクリーンショットを撮ってLineに通知できるようになる

第2回目:pythonでGmailを操作してみよう

課題内容

あなたは、キノコード株式会社の業務効率化担当です。
日本国内のLINEのアクティブユーザー数は約9200万人(2022年4月)であり、
業務でもLineを使った情報共有を行なっている企業も多いです。
さらに自社のLine公式アカウントを作り、ユーザーへ新たなアプローチ方法としても利用されています。

今回はLineへテキストや画像の投稿をpythonで実装することに取り組みます。
標準的な送信からこれまでのpandasを使ったエクセルの操作やwebブラウザの処理と掛け算した問題となっています。
Lineを使った業務効率化や売上アップの施策をできるようになるとDX人材としても活躍の幅を広げることができますので
課題を通して、Lineを業務効率化のツールの一つとして使いこなせるようになリます。

課題に取り組む際にこちらのキノコードサイトを参考に学習を進めましょう。

[問0] Line notifyの設定をしましょう

  1. キノコードのブログおよびyoutubeでLine notifyの初期設定および、アクセストークンを取得しましょう。取得したトークンは変数TOKENに代入をしましょう
    また、こちらのキノカレッジ用資料も配布いたします。(※キノカレッジ内の限定資料のため外部への配布はご遠慮いただくようお願いいたします)

[問1] Line notifyでテキストを送信してみよう

  1. requestsライブラリをインポートしましょう。インストールしていない方は!pip install requestsを実行させましょう
  2. 変数api_urlに"https://notify-api.line.me/api/notify" を代入しましょう
  3. 変数contentsに'キノカレッジからの通知です'の文字列を代入しましょう
  4. requestsのpostメソッドに渡す引数を辞書型で格納する次のコードを実行させましょう
    TOKEN_dic = {'Authorization': 'Bearer' + ' ' + TOKEN}
    send_dic = {'message': contents}
  5. requests.post()のコードの引数に、変数api_url, TOKEN_dic, send_dicの3つを渡し、コードを実行させましょう。出力に<Response [200]>、そしてLineの通知があれば成功です
  6. 小問1から5までのコードをひと塊にしておきましょう
  7. 小問6のコードを関数化しましょう。関数名send_line_notifyとし引数に変数contentsを記述しましょう。関数内に必要なコードを記述して完成させましょう

[問2] Line notifyで色々なテキストを送信してみよう

  1. 問1で関数化したコードをセルごとコピーし、新しいセルに貼り付けましょう。関数名をsend_line_notify_ver2に変更しましょう
  2. 変数contensに"キノカレッジ問2_2の課題"の文字列を代入しましょう。下記のコードを記述し、実行させLineの通知が届けば完了です
    contents = 'キノカレッジ問2-2の課題'
    send_line_notify(contents)
  3. 変数contentsに"キノカレッジ問2-3。改行ありのコードです"の文字列を代入しましょう。変数contentsの。後に改行を入れるコードを書き加えましょう。Line上でも改行ができているか確認し、下記のようなLineの通知が届けば完了です
    キノカレッジ問2-3の課題
    改行ありのコードです
  4. datetimeモジュールを使って、変数contentsに今日の日付を代入できるようにしましょう。下記のようなLineの通知が届けば完成です
    2022-11-22
    キノカレッジ問2-4の課題
    改行ありのコードです

[問3] Line notifyで画像を送信してみよう

  1. pandasをpdとして、seabornをsnsとしてインポートしましょう
  2. 次のコードを実行させて、変数dfにデータを代入しましょう
    df= pd.read_excel('https://data.kinoquest.jp/pandas/input/sample.xlsx', sheet_name='実績管理表_売上欠損')
  3. dfの列"売上日を"indexに設定し、 月毎の売上金額(円)の合計を算出します。x軸に各月、y軸に売上合計金額としたseabornの折れ線グラフを描写しましょう
  4. 小問3の図を"sales_month.png"として保存しましょう
  5. 新しいセルに関数send_line_notify_ver2のコードをセルごとコピーし、新しいセルに貼り付けましょう。関数名をsend_line_notify_ver3に変更し、第2引数にbinaryを渡しましょう。第1引数はcontentsのままです
  6. 関数内にコードを追加します。変数image_dic に {'imageFile': binary}を代入しましょう
  7. 関数内にコードを追加します。request.postのメソッドの引数filesにimage_dicを代入しましょう。そして、一度セルを実行させましょう
  8. 新しいセルに関数send_line_notify_ver3の引数に渡すデータを用意します。
    1. 変数contentsを宣言し、"各月の売上データ"を代入しましょう
    2. 小問4で保存した画像をバイナリデータとして読み込み、変数binaryへ代入しましょう
  9. send_line_notify_ver3(contents, binary)を実行させて、文字と画像を含んだLineの通知が届けば完成です

[問4] Seleniumでスクリーンショットを取り、Line notifyで通知してみよう

  1. 問3で作成した関数send_line_notify_ver3(contents, binary)のコードをセルごとコピーして、新しいセルに貼り付けましょう。関数名をsend_line_notify_ver4に変更し、一度実行させましょう
  2. 別途新しいセルに次のコードをコピーして貼り付けましょう。11月講座で用いたseleniumを使用します。インストールや初期設定ができていない方は11月第2回講座を参照し、seleniumとdriverを使えるようにしましょう
    import time
    from PIL import Image
    import selenium
    from selenium import webdriver
    from selenium.webdriver.chrome.options import Options

    options = Options()
    options.headless = True

    # Mac (homebrewでchromedriverをインストールしている場合)
    # browser = webdriver.Chrome()

    # Mac (Chromedriveが保存している場所)
    browser = webdriver.Chrome(executable_path="../2211/chromedriver", options=options)

    # Windows (chromedriver.exeがあるパス)
    # browser = webdriver.Chrome(executable_path="C:\chromedriver.exe")

    # キノコードのデモサイトにアクセス
    browser.get("http://kino-code.work/2020/01/")

    # seleniumのget_screenshot_as_pngメソッドでスクリンショットのバイナリーデータをPNG形式で取得する
    binary = browser.get_screenshot_as_png()

    # browserを閉じる
    browser.quit()
  1. 小問2のセルの一番下にコードを追加します。変数contentsを記述し"デモサイトのスクリーンショット"という文字列を代入しましょう。send_line_notify_ver4(contents, binary)を記述し、セルを実行させましょう。文字と画像を含んだLineの通知が届けば完成です

[問5] まとめ問題

  1. 問4のコードを参考にし次の課題に取り組みましょう。
    ご自身で指定した任意のサイトにアクセスし、スクリーンショットを撮ってLineへ通知させるコードを書きましょう。いつ撮った写真であるかもわかるように日時も文字列へ追加しましょう