APIキーを使わずにPythonからGoogle翻訳

今回紹介する googletransGoogleの翻訳APIを使わずに翻訳を行うことができるPythonライブラリです。翻訳以外にも言語の検知に使うこともできます。

github.com

まずは、pipを使ってgoogletransをインストールします。

$ pip install googletrans

インストールができたら翻訳をしてみましょう。Translatorインスタンスを作成した後、第一引数に対象文、destに変換先言語を指定してtranslateメソッドを呼び出します。

>>> from googletrans import Translator
>>> translator = Translator()
>>> translator.translate('今日はいい天気です', dest='en')
Translated(src=ja, dest=en, text=It is a good weather today, pronunciation=None, extra_data="{'translat...")
>>> translator.translate("It's cloudy today.", dest='ja')
Translated(src=en, dest=ja, text=今日は曇っている。, pronunciation=None, extra_data="{'translat...")
>>> 

また、detectメソッドを使うことで、言語の検知をすることもできます。

>>> translator.detect('この文章は日本語で書かれました。')
Detected(lang=ja, confidence=1)
>>> translator.detect('This sentence is written in English.')
Detected(lang=en, confidence=1)

PythonでInstagram APIを使わずに投稿を取得する

前回はTwitterの公式APIを使わずにTweetを取得できるライブラリであるTwitter Scraperを紹介しました。今回はその Twitter Scraper にインスパイアされて作られた Instagram Scraper を使ってみたいと思います。Instagram Scraper は Instagram の公式APIを使わずに投稿を取得することができるPythonライブラリです。

github.com

インストール

まずは Instagram Scraper をインストールします。 pipを使ってインストールしたいところなのですが、Instagram Scraper は今のところpipでのインストールには対応していません。 そこで、リポジトリをクローンしてインストールをします。クローンしたらリポジトリ内にあるrequirements.txtを使って必要なパッケージをインストールします。

$ git clone https://github.com/meetmangukiya/instagram-scraper.git
$ cd instagram-scraper
$ pip install -r requirements.txt

インストールは以上です。

使い方

インストールが完了したら、Pythonインタプリタを起動します。 インタプリタを起動したら、scrape_instagram関数をインポートします。 scrape_instagram関数にタグを指定することで、Instagramの投稿を取得する仕組みになっているようです。

>>> from instagram_scraper import scrape_instagram
>>> 
>>> list(scrape_instagram(['quotes', 'meet'], 1))
[('https://scontent-nrt1-1.cdninstagram.com/vp/6969e25d53bcf493944639c4ceaa8bc2/5C10E661/t51.2885-15/e35/c0.135.1080.1080/s150x150/36885191_734652190205497_1283998134044721152_n.jpg',
  '',
  set(),
  set()),
 ('https://scontent-nrt1-1.cdninstagram.com/vp/5e56f2bfabe1b48881c15e5ee16a7705/5BEE8D29/t51.2885-15/sh0.08/e35/c0.0.662.662/s640x640/37702301_694562980905572_7369649703631192064_n.jpg',
  'Follow ( @textgoalsbabe) ♥ For More',
  set(),
  {'textgoalsbabe'}),
 ('https://scontent-nrt1-1.cdninstagram.com/vp/e093ea347b8c8475d983b4512404ab01/5BEFE9DD/t51.2885-15/e35/c0.134.1080.1080/s150x150/38424785_688684664809911_8521908696647729152_n.jpg',
  '',
  set(),
  set()),
 ('https://scontent-nrt1-1.cdninstagram.com/vp/cdf2ce6a68abf77caae00acbc113a4f3/5B6E05DA/t51.2885-15/e15/c157.0.405.405/38285822_251483489018320_668763636763721728_n.jpg',
  'reunited♡\n'
  '5th hug—8.8.18\n'
  'vereint bis 9.8♛ { @leanaa.swz & @__stellaaaaa\n'
  '#lela #internetfriends #internetfreunde #ibfsquad #ibfgoals #meet '
  '@webfriendsvides \n'
  '@virtuel_r @virtual.ibfs @ifreposts @ibfgoalz_',
  {'ibfgoals',
   'ibfsquad',
   'internetfreunde',
   'internetfriends',
   'lela',
   'meet'},
  {'__stellaaaaa',
   'ibfgoalz_',
   'ifreposts',
   'leanaa.swz',
   'virtual.ibfs',
   'virtuel_r',
   'webfriendsvides'})]

うーん、何がどこに入っているかわからないですね。 そもそも、インスタグラムをスクレイピングして取得したいのは、画像や動画のはずです。 その点ではこのライブラリはあまり適していないと思われます。

PythonでTwitter APIを使わずにTweetを取得する

データ分析をしたり、コーパスを作成する際に、Tweetを取得することはよくあると思います。しかし、Twitterの公式APIは制限がやたら厳しく、使いやすいとは言えません。今回紹介する Twitter ScraperTwitterの公式APIを使わずにTweetを取得することができるPythonライブラリです。APIの制限がなく、非常に高速に動作するのが特徴です。

ちなみに、Twitter Scraper の作者は requests を作った Kenneth Reitz です。

github.com

インストール

まずは、pipenvを使ってtwitter-scraperをインストールします。 このとき、仮想環境のPythonバージョンは3.6以上にしておいてください。 なぜなら、twitter-scraperの中ではPython 3.6から追加されたfstringを使っているからです。 そのため、Python 3.6 未満の環境だと、パッケージをインポートした際に例外が発生してしまいます。

$ pipenv install twitter-scraper
Installing twitter-scraper...
Adding twitter-scraper to Pipfile's [packages]...
Pipfile.lock not found, creating...
Locking [dev-packages] dependencies...
Locking [packages] dependencies...
Updated Pipfile.lock (776465)!
Installing dependencies from Pipfile.lock (776465)...
  🐍   ▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉ 19/19 — 00:00:05

使い方

インストールが完了したら、Pythonインタプリタを起動します。 インタプリタを起動したら、get_tweets関数をインポートします。 get_tweets関数にユーザ名を指定することで、Tweetを取得することができます。

>>> from twitter_scraper import get_tweets
>>> 
>>> for tweet in get_tweets('kennethreitz', pages=1):
>>>     print(tweet['text'])
P.S. your API is a user interface
OPINIONS
...

pagesパラメータを指定することで過去のTweetにさかのぼって取得することができます。 「これで指定したユーザのTweetをすべて取得できる!」と思いきや、数百件取得するとそれ以上は取れなくなります。 とはいえ、Twitter APIの制限を気にせず使えるので、有効活用していきましょう。