【Python学習】Twitter API v2をつかって自動投稿 (tweepy利用)
Twitterからの情報収集やツイートを自動化したいと思い、やり方を調査しました。
しかし、TwitterAPIが2021年11月にバージョンアップしたらしく、ネット上の情報では上手くいかないところがありました。
自分がはまったところと、簡単な検索、ツイートプログラムをご紹介します。
API利用登録
英語サイトでの登録になるため、昇格の為だけにTOEIC受けてる自分には辛かったです(笑)以下の流れで、登録していきました。
- TwitterAPI サイトにアクセス。ググればトップに出てくる。
- 「Sign Up」から登録。
- 必要事項を記入
- メールが届くのでクリック。
ここまでが、APIを利用するための事前申請になります。
以降は、各種APIキーを取得するため設定になるので、作りたいプログラムごとに実施することになります。 - アプリ名を設定
- 各種キーが発行。このタイミングで出てきたキーは使いません。ハマりました。
- と思いきや、発行されたデフォルト状態では、権限がReadになっており、ツイートすることができませんでした。
設定を変更し、Writeできるようにします。
- 権限の変更が完了
-
各種キーを再発行。こっちを使う。
これでAPIキーの発行は完了です。
Pythonプログラム
次にPythonでAPIを利用するプログラムを作成していきます。
今回はtweepyというライブラリを利用して実施しました。
tweepyは開発が終了しているようですのであしからず。
tweepy.API()
ではなくtweepy.Client()
を使用することで対応できるようです。
キーワード検索した結果表示と、ツイートするプログラムを簡単に作成しました。
ソースコードと実行結果は以下の通りです。
<ソースコード>
import config import tweepy # 認証に必要なキーとトークン BT = config.BEARER_TOKEN AK = config.API_KEY AS = config.ASI_KEY_SECRET AT = config.ACCESS_TOKEN ATS = config.ACCESS_TOKEN_SECRET client = tweepy.Client(BT, AK, AS, AT, ATS) def search_tw(msg): response = client.search_recent_tweets(msg) print(response.meta) tweets = response.data for tweet in tweets: print(tweet) print("================================") def create_tw(msg): response = client.create_tweet(text=msg) if __name__ == '__main__': search_tw("はてなブログ") create_tw("Tweetpyでの投稿テスト")
<実行結果:検索結果表示>
はてなブログに投稿しました |
Editor Utility Widget と Python で CSV とやり取りする - You are done! https://t.co/7oZD2k4cEQ
=====================================================
はてなブログに投稿しました #はてなブログ
和気鵜飼谷温泉のサンシュユ - あの瞬間!俺たちは若かった!!
https://t.co/crwymFV1aW
=====================================================
RT @nikolaevbonifa1: 『京都御所無料ガイドツアー』詳細レポート!京都観光の穴場おすすめスポットです!
はてなブログ投稿しました!
旅人サイファのお出かけブログ https://t.co/jYRDy8XZnO
#ブログ更新 #旅人サイファ #旅行プランニン…
=====================================================
はてなブログに投稿しました #はてなブログ
東北新幹線に乗っていたら大地震に襲われた瞬間の動画 - ステレッパツ
https://t.co/ygB9UWF8qA
=====================================================
はてなブログに投稿しました #はてなブログ
来週(3月21日~3月25日)の投資戦略 - 儲ける&儲かる!株式投資、DC(確定拠出年金)
https://t.co/6LMGdKKZAA
=====================================================
はてなブログに投稿しました #はてなブログ
初動相場追記
【タクティカル・マスターズ 当たり】フラゲで全収録カード判明!商品詳細&最新情報・現在の収録カードなど色々とまとめ! - 【遊戯王 最新情報】まいログ:遊戯王,TCGやトレンド情報まとめ
https://t.co/CcChJHp1tP
=====================================================
[はてなブログでフッタにコピーライトを記載する方法]
ブログのフッタに Copy Light を掲載してみました。
#はてなブログ #ブログカスタマイズ
https://t.co/3lg2zubJUM
=====================================================
はてなブログに投稿しました #はてなブログ
おはようございます!素敵な3連休をお過ごしください!
★英語のレッスン★Phrasal verbs~LESSON 72 Come out~バケットリスト続き - Channel-Phrasalverbs’s blog
https://t.co/dplTeQA6JI
=====================================================
はてなブログに投稿しました #はてなブログ
やる気を上げる方法 - cocosapo-yusuke’s blog https://t.co/0b0xZNTcwZ
=====================================================
はてなブログに投稿しました #はてなブログ
【白銀の城のラビュリンス 価格 相場】初動相場,値上がり・高騰は?現在の相場をおさらい! - 【遊戯王 最新情報】まいログ:遊戯王,TCGやトレンド情報まとめ
https://t.co/dE3FC9FMcD
=====================================================
<実行結果:ツイート>
Tweetpyでの投稿テスト
— レオハル@車載のソフト屋さん🚗 (@vefortec) 2022年3月18日
最後に
ウェブにある情報が、v1時代のものが多いようです。
v2になった以降の情報も、しっかり確認すればあるようなので、見極めが大事ですね。
自分が特にはまったところは、Write権限付与後に再度APIキーを発行しなおさないといけなかったところです・・・。
参考サイト:
【Python×Twitter】検索ツイートのデータ取得・分析|APIとtweepy活用による自動運用アプリ開発支援
iPhone 12 64GB 一括1円祭り 参戦
こんにちは。
娘とテストの順位がよかったらiPhone購入を約束してしまい、
結果よかったから早く買えと脅されていたレオハルです。
さて、本日はお得な情報を共有したいと思います!
購入結果
冒頭の通り、余計な約束をしてしまったので購入することになっていたiPhoneですが、かなりお得に購入することができました。
なんと、お値段1円!!
10万近くするスマートフォンが1円です。
胡散臭い匂いがプンプンしますが、実際の購入領収書がこちらです。
3台購入しました。
条件詳細については、後述しますが、MNP2台と学割新規1台になります。
それにしても笑えるレシートですね。
¥95040
ー¥95039
¥1
これを見た一般人の嫁の反応は「どういうこと!?意味わからん!」でした。
こういうのが出回るとまた規制がかかるんじゃないかなぁと思いますが・・・。
祭りには、参加できるときに参加しようと決めています。
行動しないと損するだけだと過去に学びましたから。
購入条件
条件を整理すると以下のような感じです。
【共通】
今回購入したキャリア:ソフトバンク
端末:iPhone12 64GB
【MNP2台(父・母)】
料金プラン:基本プラン+メリハリ無制限
オプション:準定額オプション+、あんしん保障パック、iphoneセキュリティパック
【学割新規1台(子)】
料金プラン:基本プラン+データプラン3GB
オプション:準定額オプション+、あんしん保障パック、iphoneセキュリティパック
昔は、総務省が制限をかける前もMNPやら新規契約で投げ売りやらキャッシュバックやらいっぱいありましたが、最近は全くなかったような印象でした。
当時までとはいかないまでもかなりお得です!!
オプション等についても、キャリアのマイページから外せるようなものだけで、過去を知る自分からするとかなり良心的に感じてしまいます(笑)
維持費
なにも手を加えないとこんな感じになるよという月々の支払シミュレーションがこちらです。
親の基本料金が、1078+6160+880-1210-1650 = 5258円
※ヤフークーポンで父1回線は、1年間だけ-1100円で4158円
子の基本料金が、1078+1650+880-1430-1188=990円
やっぱりMVNOじゃない大手キャリアはめちゃ高いですね。
今後の自分の予定としては、BL入りに気を付けつつ、格安simに再び乗り換えて運用でしょうか。
自動車ソフトエンジニアの今週の気になるニュース【2022/2/13-2/19】
自動車部品メーカーでソフトウェアエンジニアになって、もうすぐ15年になります。
少しは業界のことが分かってきたと思います。
そんな自分が今週気になったニュースについて、考察していきます。
今週"気になっただけ"で、発表時期が今週かどうかは分かりません!ご容赦ください(笑)
こんなこと考えている奴もいるんだなと、何かのきっかけや、自動車業界を目指す就活中の方、転職活動中の方の参考になれば幸いです。
そもそも世の中の動向をチェックするのは自分の為になりますしね。
トヨタ労組 春闘
そろそろ春闘の季節です。
トヨタの要求といえば、全従業員一律での賃上げから、職種・階級ごとに応じて引き上げ要求額を変えるという形に変えると話題になっていましたね。
これまでは、全従業員の平均でいくらアップという形で、従業員からすると、自分はいくら上がるのか分かりにくかったのでしょう。
というか、自分の会社もそうです……
参考ですが、この業界は、いまだ年功序列が根強いため、基本的には、毎年昇給していきます。毎年出る賃上げ要求は、いつも通りの決まった定期昇給分も含んでいるため、実際のベースアップはすごく少ないということもあります。
定期昇給させてもらえる分いい業界なのかもしれません。
Youtubeがメタバース参入!?
Youtubeが18日にメタバースへの参入について検討していると公式ブログで明かしました。まずはゲームに適用を検討していると考えを示しています。
自動車業界にも、ブロックチェーンの技術とかは来そうな気がします。
よりパーソナルな情報を車に活かしたり、製造・流通面でも使えそうな気がします。
一方でメタバースですが、これがほんとに広がれば、そもそも人が移動する必要性が低くなる気がしますよね。
情報伝達やコミュニケーションのために、移動する必要がありませんから。
オートメーション化が進めが、ほんとに仕事に移動は必要なくなります。
物理的な身体の移動は、ほぼ趣味的な感じになるんではないかとも思います。
まぁ、自分が現役の間はそこまで進むことはないでしょう……
最後に
やっぱり給与が関係する春闘ネタに目がいってしまいました(笑)
労働組合の役職も、下のほうの階層は、持ち回りでやったこともあるので、意外と身近です。裏事情も聞いたことがあります。話せませんがね!
技術的なネタをもっと提供できるようにしていきたい。
【Python学習】ビットコイン自動売買プログラム#3 ~ request.postで送信して売買要求~
こんにちは。
ビットコイン自動売買プログラム作成を進めるレオハルです。
~前回記事~
今回は、ついにコインチェックの売買をPythonで行います。
実際に売買が出来れば、あとは、儲かるロジックを考えるだけです!
それが出来れば、世の中の人みんな大儲けできるわけですが……
ともかく、まずは売買できる仕組みを構築します。
POSTメソッド
APIへアクセスするということは、HTTPでHTMLをインターネット経由で送受信していることと同じです。
HTTPで送受信する仕組みとして、GETとPOSTがあります。
GET:サーバから情報取得してくるときに使用する
POST:サーバへ情報を登録するときに使用する
だそうです。
ビットコインの購入・売却には、利用者からいくらで買うのか、何ビットコイン売るのか、などをこちらから指定する必要がるため、POSTを利用します。
パラメータの指定
公式のAPIドキュメントから、パラメータの指定方法を確認します。
今回は、現在価格を取得して、成行注文で購入することにします。
params = { 'pair': 'btc_jpy', 'order_type': 'market_buy', 'market_buy_amount': 現在価格 }
売却は、所有しているビットコインをすべて一度に売却します。
params = { 'pair': 'btc_jpy', 'order_type': 'market_sell', 'amount': 保有ビットコイン }
現在価格・保有ビットコインは、これまで利用していたAPIを駆使してどうにか設定します。
Pythonコード
リクエスト処理
認証コードをすべての機能に入れ込むのは面倒なので、関数化します。
アクセスURL:endoint
売買時のパラメータ:params(未指定の場合、None)
GET/POST切り替え:method(未指定の場合、GET)
def reqest(endpoint, params=None, method='GET'): time.sleep(1) nonce = str(int(time.time())) body = json.dumps(params) if params else '' message = nonce + endpoint + body signature = hmac.new(SECRET_KEY.encode(), message.encode(), hashlib.sha256).hexdigest() headers = { 'ACCESS-KEY': ACCESS_KEY, 'ACCESS-NONCE': nonce, 'ACCESS-SIGNATURE': signature, 'Content-Type': 'application/json' } if method == 'GET': r = requests.get(endpoint,headers=headers,params=params) else: r = requests.post(endpoint, headers=headers, data=body) return r.json()
購入処理
購入時は、購入したいビットコイン量を指定してorder_buyを実行します。
def private_rate(buy_amount): params = {'order_type': 'buy', 'pair': 'btc_jpy', 'amount': buy_amount} endpoint = url+'/api/exchange/orders/rate' r=reqest(endpoint=endpoint,params=params) return r def order_buy(buy_amount): market_buy_amount =private_rate(buy_amount) buy_amount_jpy=market_buy_amount['price'] params = { 'pair': 'btc_jpy', 'order_type': 'market_buy', 'market_buy_amount': buy_amount_jpy } endpoint = url + '/api/exchange/orders' r = reqest(endpoint, params=params, method='POST') print(r)
売却処理
売却時は、order_sellを実行することで保有しているビットコインを全部売却します。
def private_balance(): endpoint = url+'/api/accounts/balance' return reqest(endpoint=endpoint) def private_position(): balance = private_balance() return {k: v for k, v in balance.items() if isinstance(v, str) and float(v)} def order_sell(): position = private_position() params = { 'pair': 'btc_jpy', 'order_type': 'market_sell', 'amount': positions['btc'] } endpoint = url + '/api/exchange/orders' r = reqest(endpoint, params=params, method='POST') print(r)
実行結果
購入時・売却時それぞれ成功すれば、下記のような応答が表示されます。
購入時
{'success': True, 'id': 4399663184, 'amount': None, 'rate': None, 'order_type': 'market_buy', 'pair': 'btc_jpy', 'created_at': '2022-02-25T09:08:09.000Z', 'market_buy_amount': '22111.07', 'stop_loss_rate': None}
売却時
{'success': True, 'id': 4399663801, 'amount': '0.005', 'rate': None, 'order_type': 'market_sell', 'pair': 'btc_jpy', 'created_at': '2022-02-25T09:08:26.000Z', 'market_buy_amount': None, 'stop_loss_rate': None}
これで、自動売買システムの基礎となる購入処理・売却処理が実装できました。
あとは、自動で売り買いするロジックと24時間稼働させればOKですね。
自動車ソフトエンジニアの今週の気になるニュース【2022/2/6-2/12】
自動車部品メーカーでソフトウェアエンジニアになって、もうすぐ15年になります。
少しは業界のことが分かってきたと思います。
そんな自分が今週気になったニュースについて、考察していきます。
今週"気になっただけ"で、発表時期が今週かどうかは分かりません!ご容赦ください(笑)
こんなこと考えている奴もいるんだなと、何かのきっかけや、自動車業界を目指す就活中の方、転職活動中の方の参考になれば幸いです。
そもそも世の中の動向をチェックするのは自分の為になりますしね。
自動運転でドリフトするトヨタスープラ
car.watch.ihttps://www.youtube.com/watch?v=0fqgrwN8J-Ampress.co.jp
TRI(Toyota Research Institute)が動画を公開しました。
動画には、スープラがドライバがハンドルを握らずにドリフト走行をしながらコースを駆け抜けていく様子が収められています。
てっきりパフォーマンスのための動画かと思ったら、走行中に予期せぬアクシデントが起きたときにも車両をコントロールできるように安全性を向上させるための技術として開発しているようです。
将来は、市販車への搭載も志しているようです。
車載ソフトウェアエンジニアとしては、ワクワクする動画ですね。
自動運転技術の開発に直接携わっていませんが、こうなっているのかなぁと想像します。
同じコースをくるくる回るだけだったら、AIといっても意外とモデル予測制御とか非線形モデル予測制御の応用とかだったりするんでしょうか?
ソニーAI、グランツーリスモのチャンピオンに勝利
こちらは、ソニーのAIの話です。
ソニーAIが、深層学習を用いたグランツーリスモ用のAI「グランツーリスモ・ソフィー」を発表しました。
学習には、報酬やペナルティを与えて自立学習を促す「強化学習」が用いられているようです。
将来市販車で自動運転が用いられたとしても、なかなか実機で学習や検証をすることは難しいのではないでしょうか。
そうなってくると、シミュレーション上での学習は必須になってくるはずです。
そうした技術の場合、ソニーのような企業は自動車メーカーを抜いて優位な立場になることもあるかもしれないですね。
最後に
今週はAI関係に目がいった一週間でした。
車の制御も結局は時系列データで次はどうなるが予測できれば対処のしようがありそうな気がします。
RNNやLSTMを活用した車両制御ソフトが市販される日も遠くないかな!?
【Python学習】ビットコイン自動売買プログラム#1 ~ requestsでAPIにアクセス~
こんにちは。
前回からビットコイン自動売買プログラムの作成を決意したレオハルです。
~前回記事~
今回は、「API」を使ってビットコインの最新情報を取得したいと思います。
APIへのアクセスには、「requests」のライブラリを利用します。
APIについて
まずAPIとは、なんでしょうか?
API=Application Programming Interface(アプリケーション プログラミング インターフェース)
です。
APIという用語は、車載ソフトの世界でも登場しますね。
アプリケーション"A"とアプリケーション"B"をつなぐための架け橋のようなものです。
「別のアプリケーションのある機能を使いたい!」というときに、簡単に、便利に使えるようにしてくれるものになります。
今回の場合で言うと、
「自作Pythonプログラム」で「ビットコイン最新情報取得機能」を使いたいので、APIを利用するということになります。
RequestsでAPIへアクセス
今回は、松田翔太さんのCMでおなじみのcoincheck(コインチェック)を利用したいと思います。
コインチェックのAPIについては、下記URLに公式ドキュメントが記載されています。
https://coincheck.com/ja/documents/exchange/api
大きく分類すると、2つの種類の分かれるようです。
「Pablic API」
取引所の注文状況や公開されている取引の履歴、板情報を参照する
「Private API」
取引所での新規注文やそのキャンセル、自分の残高などを確認する
まずは、PublicAPIの一つであるティッカーと呼ばれるAPIにアクセスして、各種最新情報を取得したいと思います。
API利用方法
今回のAPI利用方法ですが、「簡単に言うとURLにアクセスして情報を取得する」のと同じことになります。
コインチェックのURL( https://coincheck.com/ )の後ろに目的のURLを指定することで利用できます。
ティッカーの情報の場合、後ろに /api/ticker を付ければいいようです。
PythonによるURLへのアクセス
Pythonで先ほどのURLへアクセスし情報を取得するためには、
requests を利用します。
requestsで取得したtiker情報を表示するプログラムを作成しました。
import requests import pprint as pp url = 'https://coincheck.com' def ticker(): endpoint = url + '/api/ticker' r=requests.get(endpoint) pp.pprint(r.json()) if __name__ == '__main__': ticker()
pprintを利用することで、見やすく表示しています。
データの中身は、JSON形式と呼ばれる形式で格納されているので、これをpythonの辞書型に変換するためjson()を利用しています。
実行した結果が以下のように出力されました。
{'ask': 5032000.0, 'bid': 5031214.0, 'high': 5311666.0, 'last': 5033654.0, 'low': 4956262.0, 'timestamp': 1644563352, 'volume': 3282.96584376}
それぞれのデータの説明は次のようになります。
- last 最後の取引の価格
- bid 現在の買い注文の最高価格
- ask 現在の売り注文の最安価格
- high 24時間での最高取引価格
- low 24時間での最安取引価格
- volume 24時間での取引量
- timestamp 現在の時刻
これでビットコインの最新情報が取得できるようになりました。
引き続き自動売買に向けて実装を進めていきたいと思います。
coincheck以外の取引所でもAPIが使えるところは多いようです!
【Python学習】ビットコイン自動売買プログラム#0 ~学習の動機~
こんにちは。
仕事で自動車部品のソフトウェア開発をしています。
いわゆる、組込み系ソフトウェアエンジニアになります。
車載組込み系ソフトの場合、やっぱりC言語が多いのではないでしょうか?
自分の勤める社内を見てもほとんどC言語で実装されています。
そんな環境にいる私ですが、最近は、プロジェクトマネージャー的なポジションになることも多くなっています。
そうなってくると、業務効率の改善を上役からは期待されます……
どうせなら、新しいことをやってワクワクしながら、仕事をしたい!
そうだ!Python使って日々の業務を自動化してみよう!!
というわけで、Python学習をスタートしました。
なぜ”ビットコインの自動売買プログラム”?
えーっと、日々の業務の効率化を目指して学習するわけですが、
題材は、私利私欲にまみれたビットコインの自動売買プログラムの作成です(笑)
そもそも、自分の場合、プログラミングの学習と言っても、プログラミングの基礎はある自分では思っています。
くわえて、これまでも参考書を読んで文法を覚えるだとか、どこかのスクールに通うなんてことはしたことがありませんし、やりたくもありません。
新しい言語を習得して使えるようにするには……
そうです!
実践あるのみです!!
言語なんで、英語とか日本語とかと一緒です。
使わないと使えるようにならないんです。
中学校から大学まで10年以上勉強しても英語は使えるようになっていません。
なぜなら使っていないからです!(オイッ!)
自宅で実践するならどうしようかなぁと考えて、思いついたのが、資産形成の一助になるかもしれないと淡い期待も込めた自動売買プログラムでした。
幸いネット上には、たくさんの先輩方が色んなコードを公開してくれています。
真似しながら勉強を進めていけそうです。
真似ることから学びます。
ちょいちょいオリジナリティも加えながら、楽しく実践学習していきたいと思います。
ついでにブログ公開することで、過去の自分に向けて書くことが、同じ経験をする人の価値になることが出来れば嬉しいですね。
組込みエンジニアによるPython学習の軌跡スタートです。
なお、不定期長期連載になると思われます。
要素毎に区切って1コンテンツ短めに発信していこうかなと考えております。