初心者のためのpython入門

自分がつまづいたところやつまづきやすいところを中心に書いていきます。また、役に立つライブラリの紹介などをしていきます。

Annotationの利用

前書き

前回(大分前...)、アノテーションの記法について紹介しました。しかし、アノテーションは書いても自動でチェックされることはありません。そこでチェック方法を紹介します。

ライブラリのインストール

Pythonの標準ライブラリには、型アノテーションをチェックするためのものがありません。 そこで外部ライブラリのmypyをpip installして使います。

pip install mypy

使い方

使い方はとても簡単です。

# sample.py
def sprint(s: str):
    print(s)

if __name__ == '__main__':
    sprint('0')
    sprint(0)
$ mypy sample.py
sample.py:6: error: Argument 1 to "sprint" has incompatible type "int"; expected "str"
Found 1 error in 1 file (checked 1 source file)

上記のようにmypy ~.pyのように実行することができます。型の一致があるとエラーが表示されます。

後書き

型の簡単なチェック方法について紹介しました。

typing: 型のヒント

前書き

今回は、typingモジュールについて紹介します。
これを利用することにより、型に関するアノテーション(注釈)をつけることができます。

使用例

まずは、基本的なアノテーションを見てみましょう。

def is_even_number(num: int) -> bool:  # 偶数か判定
    return num % 2 == 0

引数と返り値にアノテーションがつけられています。

  • num: int: 引数numint
  • -> str: 関数is_even_numberの返り値がbool

次に、少し応用的なアノテーションを見てみましょう。

from typing import List, Callable, NoReturn

def is_even_number(num: int) -> bool:  # 偶数か判定
    return num % 2 == 0

def filter_print(numbers: List[int], filter: Callable[[int], bool]) -> NoReturn:
    for number in numbers:
        if filter(number):
            print(number)

numbers = [i for i in range(10)]
filter_print(numbers, is_even_number)

typingモジュールからアノテーションに必要なクラスを読み込んでいます。

  • numbers: List[int]: int型を要素とするlist型の引数
  • filter: Callable[[int], bool]: int型を引数にとり bool型を返す関数が引数
  • -> NoReturn: 関数filter_printは返り値がない

アノテーションをつけることにより、関数の引数と返り値の型が一瞬で理解できるようになります。

from typing import Dict
counter : int = 0
numbers : Dict[str, int] = {}

上記の例のように変数にもアノテーションをつけることができます。 様々なアノテーションの例については、公式ドキュメントを参考にしてください。

後書き

今回は、関数の引数や返り値、変数にアノテーションをつけれることを紹介しました。
次回は、アノテーションをより効果的に利用する方法を紹介します。

APIキーなどの環境変数を管理

前書き

前回少し触れた、.envファイルから環境変数を読み込む方法について紹介します。

準備

今回は、dotenvというライブラリを使用します。 インストール方法は、いつも通りです。

pip install python-dotenv

実践

まずは、APIキーなどを.envファイルに定義します。 ファイル名が"."で始まるもは、隠しファイルとなります。 隠しファイルについて、知らない方は調べてみてください!

# .env
CONSUMER_KEY = "CONSUMER_KEY_ENV"  
ACCESS_TOKEN_SECRET = "ACCESS_TOKEN_SECRET_ENV"
ACCESS_TOKEN = "ACCESS_TOKEN_ENV"
ACCESS_TOKEN_SECRET = "ACCESS_TOKEN_SECRET_ENV"

隠しファイル".env"の中で定義された値を読み込んでいきましょう。
load_dotenv('ファイルパス')を実行することにより、".env"に定義した認証情報が環境変数へ追加されますos.environ.get('環境変数名')により、定義した変数を読み出しています。
ファイルパスを変更することにより、違う階層にあるファイルないに定義された値などを読み出すこともできます。

# settings.py
import os
from dotenv import load_dotenv

load_dotenv('.env') 

CONSUMER_KEY = os.environ.get("CONSUMER_KEY")
ACCESS_TOKEN_SECRET = os.environ.get("ACCESS_TOKEN_SECRET")
ACCESS_TOKEN = os.environ.get("ACCESS_TOKEN")
ACCESS_TOKEN_SECRET = os.environ.get("ACCESS_TOKEN_SECRET")

print(CONSUMER_KEY)
print(ACCESS_TOKEN_SECRET)
print(ACCESS_TOKEN)
print(ACCESS_TOKEN_SECRET)

出力の結果は、下記のようになります。 ".env"で定義された値が読み出せていることがわかります。

# python settings 結果
CONSUMER_KEY_ENV
ACCESS_TOKEN_SECRET_ENV
ACCESS_TOKEN_ENV
ACCESS_TOKEN_SECRET_ENV

後書き

APIキーなどの直書きは、危険なのでやめましょう!

Twitter API ~実践編~

前書き

時間が空きましたが、実践編を書いていきます。

OAuth認証

まずは、前回取得したアクセス情報を元にOAuth認証をしましょう。OAuthは、オーオースと読みます。

from requests_oauthlib import OAuth1Session

CONSUMER_KEY = "取得したキー"  
ACCESS_TOKEN_SECRET = " "
ACCESS_TOKEN = " "
ACCESS_TOKEN_SECRET = " "

twitter = OAuth1Session(CONSUMER_KEY, CCESS_TOKEN_SECRET, ACCESS_TOKEN, ACCESS_TOKEN_SECRET) 

これで認証は、完了です。説明を簡単にするために、直接キーを書き込みましたが、あまり良い方法ではありません。.envなどの隠しファイルに定義し、そこから読み出す方が断然良いです。

ツイート!!

次は、実際にツイートしてみましょう。

# 先程の続き
url = "https://api.twitter.com/1.1/statuses/update.json" # エンドポイント

tweet = "ツイートしたいこと "
params = {"status" : tweet}

res = twitter.post(url, params = params) # 実際にツイートされるので注意

if res.status_code == 200: 
    print("成功")
else: 
    print("失敗")

Postするときに、paramsに規定のパラメータを与えることによりツイートすることができます。Postとは、HTTP通信でアプリケーションなどからWebサーバへ送るリクエストの種類の1つです。Postを用いることでURLで指定したプログラムなどにデータを送信できます。今回は、ツイートのデータを送っています。status_codeは、Webサーバからのレスポンスを意味しています。200は、成功を意味します。有名なstatus_codeは、404(page not found)などではないでしょうか。

あとがき

今回は、OAuth認証とツイートの例を紹介しました。他にもタイムラインの取得やフレンドのツイートの取得、写真を含んだツイートなど色々なことができます。ぜひ、調べて色々と遊んでみてください。簡単にボットを作ることもできます。

Twitter API ~ 準備編 ~

前書き

今回は、Twitter APIについて紹介します。 理由としては、APIについての説明と身近なアプリケーションをプログラムから操作する面白さを感じてもらいたいということです。

APIとは

APIとは、Application Programming Interfaceの頭文字です。
APIは、内部実装が公開されていないアプリケーションにアクセスするために必要な機能と仕様を定義している説明書のようなものです。APIが提供されていることで、Twitterのようなアプリケーションに内部実装を知らないままにアクセスし、プログラムから操作したりすることができます。

準備

Twitter APIの使用登録

Twitter Appにアクセスし(無料)、[Create an app]で新規作成します。 URLの入力が必要なことがありますが、なんでも構いません。 各種Keyを発行します。以下の4つです。

ライブラリのインストール

今回は、requestsとrequests-oauthlibを使用します。 インストール方法は、pip install requests requests-oauthlibです。

requestsとrequests-oauthlibについては、近々紹介したいと思います。

後書き

今回は、APITwitter APIを利用するための準備について説明しました。次回は、実際にTwitter APIを使ってみましょう!