#API を叩くには #python と #shell と #jq コマンドを組み合わせて、標準入出力でパイプするのが良さげじゃない?
Twitterでツイートして、すぐにそれを削除する例
- シェルで
Hello Mr.Twitter
を標準出力する
- python が標準入力を受け取ってツイートして、API から受け取った json を標準出力する
- jq コマンドでツイートの id を標準出力する
- また別の python スクリプトが ID を標準入力で受け取って、削除して、APIから受け取った json を標準出力する
- jq コマンドで json の内容をフォーマットして標準出力する
echo "Hello Mr.Twitter " | python twitter/create.py | jq --raw-output '.["id_str"]' | python twitter/destroy.py | jq .
イメージ
Hello Mr.Twitter
を標準出力するecho "Hello Mr.Twitter " | python twitter/create.py | jq --raw-output '.["id_str"]' | python twitter/destroy.py | jq .
script - config.py
CONSUMER_KEY = ''
CONSUMER_SECRET = ''
ACCESS_TOKEN = ''
ACCESS_TOKEN_SECRET = ''
script - create.py
# https://developer.twitter.com/en/docs/tweets/post-and-engage/api-reference/post-statuses-update
import json, config, os, re, urllib.parse, unicodedata, sys
from requests_oauthlib import OAuth1Session
CK = config.CONSUMER_KEY
CS = config.CONSUMER_SECRET
AT = config.ACCESS_TOKEN
ATS = config.ACCESS_TOKEN_SECRET
twitter = OAuth1Session(CK, CS, AT, ATS)
message = ''
for line in sys.stdin:
message += re.sub(r'^\s+|\s+$', '', line)
formatted_message = re.sub(r'\\n', "\n", message)
formatted_message = formatted_message[:140]
encoded_message = urllib.parse.quote_plus(formatted_message)
tweet = {
"status" : encoded_message,
"in_reply_to_status_id" : os.environ.get('IN_REPLY_TO_STATUS_ID') if os.environ.get('IN_REPLY_TO_STATUS_ID') else '',
"auto_populate_reply_metadata" : 'true',
}
url = "https://api.twitter.com//1.1/statuses/update.json?status={status}&in_reply_to_status_id={in_reply_to_status_id}&auto_populate_reply_metadata={auto_populate_reply_metadata}".format(**tweet)
if os.environ.get("DEBUG"):
print(url)
else:
res = twitter.post(url)
print(json.dumps(res.json()))
script - destroy.py
# https://developer.twitter.com/en/docs/tweets/post-and-engage/api-reference/post-statuses-destroy-id.html
import json, config, re, sys, os
from requests_oauthlib import OAuth1Session
CK = config.CONSUMER_KEY
CS = config.CONSUMER_SECRET
AT = config.ACCESS_TOKEN
ATS = config.ACCESS_TOKEN_SECRET
twitter = OAuth1Session(CK, CS, AT, ATS)
for line in sys.stdin:
id = line.strip()
api_url = 'https://api.twitter.com/1.1/statuses/destroy/{id}.json'.format(**{ "id" : id })
res = twitter.post(api_url)
print(json.dumps(res.json()))
ひとこと
CONSUMER_KEY = ''
CONSUMER_SECRET = ''
ACCESS_TOKEN = ''
ACCESS_TOKEN_SECRET = ''
# https://developer.twitter.com/en/docs/tweets/post-and-engage/api-reference/post-statuses-update
import json, config, os, re, urllib.parse, unicodedata, sys
from requests_oauthlib import OAuth1Session
CK = config.CONSUMER_KEY
CS = config.CONSUMER_SECRET
AT = config.ACCESS_TOKEN
ATS = config.ACCESS_TOKEN_SECRET
twitter = OAuth1Session(CK, CS, AT, ATS)
message = ''
for line in sys.stdin:
message += re.sub(r'^\s+|\s+$', '', line)
formatted_message = re.sub(r'\\n', "\n", message)
formatted_message = formatted_message[:140]
encoded_message = urllib.parse.quote_plus(formatted_message)
tweet = {
"status" : encoded_message,
"in_reply_to_status_id" : os.environ.get('IN_REPLY_TO_STATUS_ID') if os.environ.get('IN_REPLY_TO_STATUS_ID') else '',
"auto_populate_reply_metadata" : 'true',
}
url = "https://api.twitter.com//1.1/statuses/update.json?status={status}&in_reply_to_status_id={in_reply_to_status_id}&auto_populate_reply_metadata={auto_populate_reply_metadata}".format(**tweet)
if os.environ.get("DEBUG"):
print(url)
else:
res = twitter.post(url)
print(json.dumps(res.json()))
script - destroy.py
# https://developer.twitter.com/en/docs/tweets/post-and-engage/api-reference/post-statuses-destroy-id.html
import json, config, re, sys, os
from requests_oauthlib import OAuth1Session
CK = config.CONSUMER_KEY
CS = config.CONSUMER_SECRET
AT = config.ACCESS_TOKEN
ATS = config.ACCESS_TOKEN_SECRET
twitter = OAuth1Session(CK, CS, AT, ATS)
for line in sys.stdin:
id = line.strip()
api_url = 'https://api.twitter.com/1.1/statuses/destroy/{id}.json'.format(**{ "id" : id })
res = twitter.post(api_url)
print(json.dumps(res.json()))
ひとこと
# https://developer.twitter.com/en/docs/tweets/post-and-engage/api-reference/post-statuses-destroy-id.html
import json, config, re, sys, os
from requests_oauthlib import OAuth1Session
CK = config.CONSUMER_KEY
CS = config.CONSUMER_SECRET
AT = config.ACCESS_TOKEN
ATS = config.ACCESS_TOKEN_SECRET
twitter = OAuth1Session(CK, CS, AT, ATS)
for line in sys.stdin:
id = line.strip()
api_url = 'https://api.twitter.com/1.1/statuses/destroy/{id}.json'.format(**{ "id" : id })
res = twitter.post(api_url)
print(json.dumps(res.json()))
ツールボックスに道具を揃えて、使い分けられるエンジニアになりたい。
エンジニア勉強会に参加しないエンジニア。俺です。だけど一番行って良かったと思ったのはRubyKaigi大阪01だ。@yuki24 さんの発表は本当に頭に残ってる。ツールボックスを使い分ける。ちなみに僕もLT枠で登壇した。
— 0 (@YumaInaura) February 18, 2019
Original by Github issue
Author And Source
この問題について(#API を叩くには #python と #shell と #jq コマンドを組み合わせて、標準入出力でパイプするのが良さげじゃない?), 我々は、より多くの情報をここで見つけました https://qiita.com/YumaInaura/items/90735d4a0b409cf8612e著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .