質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

88.59%

Googleカレンダーを操作できる LINE Bot を作成しているのですが、早々に行き詰まってしまいました。サポートをお願いします。

受付中

回答 0

投稿

  • 評価
  • クリップ 1
  • VIEW 793

CAZ

score 5

前提・実現したいこと

https://note.com/hidekiikeda/n/n90013275fad3 の記事を参考に、Googleカレンダーの情報をLINEで確認できるような Bot の作成をしています。
しかし、エラーを起こしてしまい、先に進めなくなっていました。

本来であれば、

>>> print(service)
Please visit this URL to authorize this application: https://accounts.google.com/o/oauth2/auth?response_type=code&client_id=603178jpvbh5iabha70c6u93t7t1.apps.googleusercontent.com&redirect_uri=http%3A%2F%2Flocalhost%3A5122F&scope=https%3A2F2Fwww.googleapis.com%2Fauth%2Fcalendar.events&state=ypuBnAzB2O9w&access_type=offline


という返答が来て、ブラウザが立ち上がり Google のログイン画面が表示されるらしいです。どうすればそのような挙動になりますでしょうか?

発生している問題・エラーメッセージ

>>> print(service)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
NameError: name 'service' is not defined

該当のソースコード

import pickle
import os.path

from googleapiclient.discovery import build
from google_auth_oauthlib.flow import InstalledAppFlow
from google.auth.transport.requests import Request

SCOPES = ['https://www.googleapis.com/auth/calendar.events']  # read/write access to Events

def credential():
   creds = None
   # The file token.pickle stores the user's access and refresh tokens, and is
   # created automatically when the authorization flow completes for the first
   # time.
   if os.path.exists('token.pickle'):
       with open('token.pickle', 'rb') as token:
           creds = pickle.load(token)
   # If there are no (valid) credentials available, let the user log in.
   if not creds or not creds.valid:
       if creds and creds.expired and creds.refresh_token:
           creds.refresh(Request())
       else:
           flow = InstalledAppFlow.from_client_secrets_file(
               'credentials.json', SCOPES)
           creds = flow.run_local_server(port=0)
       # Save the credentials for the next run
       with open('token.pickle', 'wb') as token:
           pickle.dump(creds, token)
   service = build('calendar', 'v3', credentials=creds)
   return service

試したこと

フォルダ内は下記のようになっています。
イメージ説明

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正の依頼

  • hoshi-takanori

    2020/03/22 03:15

    python quickstart.py でエラーになってますが、quickstart.py というのが「該当のソースコード」でしょうか。pickle.load でエラーになってるのはたぶん quickstart.py にエラーがある状態で実行したために token.pickle というファイルがおかし苦なってると思うので、token.pickle を消して再実行してみては。
    また、python を実行していきなり print(service) してますが、service という変数が未定義なためエラーになります。たぶん credential() の結果を service に代入すべきなのかも? でも、python quickstart.py として実行する方が正しい気がします。
    参考記事は有料のため読んでませんので、間違ってたらごめんなさい。

    キャンセル

  • CAZ

    2020/03/22 16:59 編集

    アドバイスありがとうございます。token.pickle を消して再実行してみましたが同じようなエラーが出てきてしまいました。"credential() の結果を service に代入すべき"というアドバイスに関しては、スキル不足により、うまくトライできておりません。基礎的な知識をもたず、作りたいという意欲だけで作業を開始してしまったため、技術的なアドバイスを実行できず申し訳ありません。もう少し基礎学習を進めつつ引き続きこちらの問題に取り組もうと思います。

    ありがとうございました。

    キャンセル

  • hoshi-takanori

    2020/03/23 04:20

    そうですね、プログラミングをまったくご存じない方がいきなり LINE Bot を作るというのはかなり敷居が高いです。初心者向けの Python 入門書もいろいろあると思いますので、まずは基礎から勉強するのがいいと思います。

    キャンセル

まだ回答がついていません

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 88.59%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る

  • トップ
  • Pythonに関する質問
  • Googleカレンダーを操作できる LINE Bot を作成しているのですが、早々に行き詰まってしまいました。サポートをお願いします。