Tweepyで出来る事まとめ

# 概要
Tweepyで出来る事をまとめる。

## HomeのTimeline Tweetsを取得
```python

public_tweets = api.home_timeline()
for tweet in public_tweets:
    print(tweet.text)
```

## あるユーザーのモデルを取得&モデルのメソッドを使用
```python

user = api.get_user('twitter')
print(user.screen_name)
print(user.followers_count)
for friend in user.friends():
   print(friend.screen_name)
```

### モデルのメソッドの内容
***

## フォロワーを全てフォローする
```python

for follower in tweepy.Cursor(api.followers).items():
    follower.follow()
```
## ツイートの取得
### 指定した単語を含むツイートを取得
```python

for tweet in tweepy.Cursor(api.search, q='指定した単語').items(10):
    print(tweet)
```
### 特定のユーザーのツイートを取得
```python

[tweet.text for tweet in tweepy.Cursor(api.user_timeline, id="Qiita").items(10) if (list(tweet.text)[:2]!=['R', 'T']) & (list(tweet.text)[0]!='@')]
```
### ページ毎に取得
```python

for page in tweepy.Cursor(api.user_timeline).pages(3):
    # pageはstatusのリストです。
    print(len(page))
```
### status objectに含まれるコンテンツ
* created_at : The time the status was posted.
* id : The ID of the status.
* id_str : The ID of the status as a string.
* text : The text of the status.
* entities : The parsed entities of the status such as hashtags, URLs etc.
* source : The source of the status.
* source_url : The URL of the source of the status.
* in_reply_to_status_id : The ID of the status being replied to.
* in_reply_to_status_id_str : The ID of the status being replied to in as a string.
* in_reply_to_user_id : The ID of the user being replied to.
* in_reply_to_user_id_str : The ID of the user being replied to as a string.
* in_reply_to_screen_name : The screen name of the user being replied to
* user : The User object of the poster of the status.
* geo : The geo object of the status.
* coordinates : The coordinates of the status.
* place : The place of the status.
* contributors : The contributors of the status.
* is_quote_status : Indicates whether the status is a quoted status or not.
* retweet_count : The number of retweets of the status.
* favorite_count : The number of likes of the status.
* favorited : Indicates whether the status has been favourited by the authenticated user or not.
* retweeted : Indicates whether the status has been retweeted by the authenticated user or not.
 possibly_sensitive : Indicates whether the status is sensitive or not.
* lang : The language of the status.

```python
# the ID of the status 
id = 1268080321590935553
  
# fetching the status 
status = api.get_status(id) 
  
# printing the information 
print("The status was created at : " + str(status.created_at)) 
print("The id is : " + str(status.id)) 
print("The id_str is : " + status.id_str) 
print("The text is : " + status.text) 
print("The entitities are : " + str(status.entities)) 
print("The source is : " + status.source) 
print("The source_url is : " + status.source_url) 
  
  
print("The in_reply_to_status_id is : " + str(status.in_reply_to_status_id)) 
print("The in_reply_to_status_id_str is : " + str(status.in_reply_to_status_id_str)) 
print("The in_reply_to_user_id is : " + str(status.in_reply_to_user_id)) 
print("The in_reply_to_user_id_str is : " + str(status.in_reply_to_user_id_str)) 
print("The in_reply_to_screen_name is : " + str(status.in_reply_to_screen_name)) 
  
  
print("The poster's screen name is : " + status.user.screen_name) 
print("The geo is : " + str(status.geo)) 
print("The coordinates are : " + str(status.coordinates)) 
print("The place is : " + str(status.place)) 
print("The contributors are : " + str(status.contributors)) 
print("The is_quote_status is : " + str(status.is_quote_status)) 
print("The retweet_count is : " + str(status.retweet_count)) 
print("The favorite_count is : " + str(status.favorite_count)) 
  
print("Has the authenticated user favourited the status? : " + str(status.favorited)) 
print("Has the authenticated user retweeted the status? " + str(status.retweeted)) 
print("Is the status possibly_sensitive? : " + str(status.possibly_sensitive)) 
print("The lang is : " + status.lang) 

# Result
# The status was created at : 2020-06-03 07:21:23
# The id is : 1268080321590935553
# The id_str is : 1268080321590935553
# The text is : Time really hits differently when you are
# ☝️holding a plank for a minute,
# ✌️washing your hands for 20 seconds, and… https://t.co/BBg2RIamGy
# The entitities are : {'hashtags': [], 'symbols': [], 'user_mentions': [], 'urls': [{'url': 'https://t.co/BBg2RIamGy', 'expanded_url': # 'https://twitter.com/i/web/status/1268080321590935553', 'display_url': 'twitter.com/i/web/status/1…', 'indices': [116, 139]}]}
# The source is : Twitter Web App
# The source_url is : https://mobile.twitter.com
# The in_reply_to_status_id is : None
# The in_reply_to_status_id_str is : None
# The in_reply_to_user_id is : None
# The in_reply_to_user_id_str is : None
# The in_reply_to_screen_name is : None
# The poster's screen name is : geeksforgeeks
# The geo is : None
# The coordinates are : None
# The place is : None
# The contributors are : None
# The is_quote_status is : False
# The retweet_count is : 2
# The favorite_count is : 30
# Has the authenticated user favourited the status? : False
# Has the authenticated user retweeted the status? False
```
### tweetのidが判明した際にピンポイントで検索する方法
```
https://twitter.com/intent/retweet?tweet_id="調べたいtweetのid"
```

## フォロー、フォロワー数、ユーザーのフォローを取得
```python
api.me()

api.me().followers_count
# フォロワー数確認

api.me().friends_count
# フォロー数確認

api.me().description
# プロフィールコメント表示

api.friends()
# 自分がフォローをしているユーザーのUser型の値を取得


api.create_friendship(screen_name='QiitaJobs')
# @QiitaJobsをフォローする

```
フォローをする際に、
```
tweepy.error.TweepError: Read-only application cannot POST.
```
のようにエラーが出た場合、[こちらの対処法を講じる](https://qiita.com/butsuli_shine/items/78fd5ee6fdb4a0581652)

## いいねしたツイートの表示
```python

for item in api.favorites(screen_name='Taro_Kawasaki_J', count=50): 
    json_item=item._json
    print(json_item)

# この際、jsonの中に格納されている日本語は全てユニコードで格納されている。
```


## likeの限界に関して
you do have a limit of a maximum of 180 GET requests every 15 minutes. Now, a GET request is to pull information from Twitter, which would be pulling the tweet you want to like; there’s nothing I can see that limits the number of likes you can send. Using your app you could then pull up a maximum of 17,280 tweets per day to like.

--- 参考
https://qiita.com/kitarikes/items/543ab75a379f0bf903cc
https://www.geeksforgeeks.org/python-status-object-in-tweepy/
https://qiita.com/kitarikes/items/74b58bd28325d7d43a57
https://follows.com/blog/2017/08/how-tweets-safe-day#:~:text=It's%20also%20divided%20into%2015,GET%20requests%20every%2015%20minutes.
[Tweepyで相互フォローの確認&フォロバとリムーブを自動化](https://tkstock.site/2019/10/28/python-twitter-tweepy-api-follower-remove/)
[Tweepyで検索に引っかかったツイートを自動ファボ](https://tkstock.site/2019/10/29/python-tweepy-%e3%83%84%e3%82%a4%e3%83%bc%e3%83%88-%e6%a4%9c%e7%b4%a2-%e3%81%84%e3%81%84%e3%81%ad-%e3%83%95%e3%82%a1%e3%83%9c-%e8%87%aa%e5%8b%95-api/)