ブログの更新を自動的にツイートする【IFTTT】
今回はブロガーに向けた記事となっています。
タイトル通りです。ブログに記事を投稿したら自動的にTwitterで通知してくれる設定をIFTTTで作ってみたので紹介します。(はてなブログ対応)
IFTTT(イフト)って何?って人は以下を参照して下さい。プログラミングの知識は必要ありません。
www.atmarkit.co.jp
今回は ブログに投稿 → Twitterに更新を通知する というものになっていますが、応用すれば色々なことがで切ると思います。色々なことが。
実践す
両アカウント共にログインしておいてください。
ホームに移動して右上の折りたたみメニューから"New Applet"を選択します。
「if this then that」(もし〜ならば〜をする)の「this」(もし〜ならば)の部分あたる設定をします。
"Choose a service"の検索欄に「Feed」を入れて検索します。
"New feed item"を選んで。。。
"New feed item"の"Feed URL"に自分のブログのURLの後ろに「/feed」を追加して貼ります。はてなブログの更新フィードの説明はこちらを参照して下さい。貼り終わったら"Create trigger"を選択します。
次に「if this then that」(もし〜ならば〜をする)の「that」(〜をする)の部分に当たる設定をします。つまりツイートする設定ですね。
"Choose action service"の検索欄に"Twitter"と入力して検索します。
"Post a tweet"を選択します。
Twitterに投稿する際の文面を設定します。Tweet textに初期設定されている{{EntryTitle}}と{{EntryUrl}}はブログタイトルとブログのURLとなっているのでそのままにします。今回は「ブログ更新!」という文字を入れただけです。完了したら"Create action"を選択します。
最後にレシピ(IFTTTの設定のこと)に名前をつけて"Finish"を選択します。
完成品
ブログ更新! 【仮想通貨】ビットコインの価格をグラフ化してみる 【Python】 https://t.co/9MQYrwTMLY
— 篠坂 🦀blockchain🦀 (@L00Y) 2018年2月3日
できましたね〜。以前までは作ったレシピを公開することができたのですが今はできなくなっているみたいです。
【仮想通貨】ビットコインの価格をグラフ化してみる 【Python】
今回はbitFlyerのAPIを使って1分足データをグラフにplotしていきたいと思います。私のPython学習の備忘録として書くのでかなり初歩的な内容になるかと思います。
おまけとしてPythonの標準モジュールである「os」を使ってファイル操作を伴い1時間ごとにグラフを更新してTwitterに画像付ツイートをするプログラムを作ってみました
使った環境
・MacBook Air Early 2015 Sierra 10.12.6
・Python3.6.2 pip3
モジュール
・matplotlib(pip3 install matplotlib)
・numpy(pip3 install numpy)
・requests(pip3 install requests)
numpyは使いませんがmatplotlibをインポートする際にインストールが必要らしい?(matplotlibをインポートする時にエラーが出てインストールを強要された)
おまけ
・tweepy(pip3 install tweepy)
・seaborn(pip3 install seaborn)
・os(標準モジュール)
matplotlibでグラフ化する
まずは適当な数字をplotしてみます。
#い つ も の plt from matplotlib import pyplot as plt #変数numに1〜5までの数値をリストで格納 num = [1,2,3,4,5] #グラフにリストnumを描画する plt.plot(num) #表示 plt.show(num)
3行で簡単なグラフは生成できます。numpyを使って数列を使いplotするのが恒例のようですが今回はビットコインの価格をplotするのでリストに数値を格納してplotしました。python3ではshow()をしないと表示されないようです。
続いてbitFlyerのAPIを叩いてグラフ化していきたいと思います。requestsを使って価格をjson形式で取り出し、1分毎にリストに入れてグラフに描画してみます。
from matplotlib import pyplot as plt from time import sleep #価格を出してタプルで返す def bf(): URL = 'https://lightning.bitflyer.jp/v1/getticker' ticker = requests.get(URL).json() price = int(ticker['best_ask']),int(ticker['best_bid']) return price #一分間隔で変数ask,bidにそれぞれ買値と売値を入れる for i in range(60): price = bf() ask.append(price[0]) bid.append(price[1]) sleep(60) #描画する 第二引数に描画方式 (今回は円) 第三引数にラベルを指定 plt.plot(ask,'-o',label='ask') plt.plot(bid,'-o',label='bid') # plt.plotの数値とラベルを結びつけるために必要 plt.legend() plt.show()
実行してみます。
できましたね〜(書いてる時に思ったんですがアビトラ用に各取引所のデータをplotしたら面白いんじゃねW 後日ブログに...)
おまけ -Twitterに1時間毎にグラフを更新して投稿するbotを作った-
完成品がこちら〜
$BTC 1時間の価格の推移 pic.twitter.com/jl3rwhpi3y
— 篠坂 🦀blockchain🦀 (@L00Y) 2018年1月31日
完全に自己満足botでございました〜〜〜
おやすみなさい
はてなブログPro会員になったので無料ドメインを人柱していく【Freenom】
この度は、はてなブログのpro会員になりました。Google AdSenseに広告掲載を申請するにあたり独自ドメインを取得する必要があるので、今回は無料ドメインを取得する際の手順を簡単にまとめてみました。
私はFreenomというサイトでドメインを取得して実際にこのブログに使用しています。pypiはこのブログでもだいぶお世話になっているPythonモジュールインストールリポジトリ「PyPI」を捩ってみました。
生存確認 1月26日〜
http://www.pypi.cf
いつ使えなくなるか分からないので。。。
ドメインを取得する
何はともあれ欲しいドメインを検索してみましょう。
まずはFreenomに移動して欲しいドメインを検索してみます。
.tk/ .ml/ .ga/ .cf/のドメインが取得可能なようで、3文字以下は有料だそうです。.com/や.info/などは有料ですが取得可能です。お金払うならお名前.comとかでいいでしょう。。
特定の文字列も有料だそうで。。。
今回は無難にkusaドメインを取得します。欲しいドメインを選択して下までスクロール、"チェックアウト"をクリックで確認画面に行きます。
"Period"(期間)を選択します。12Monthまでは無料なので、それを選択します。更新手続きをすれば無料で1年以上使えるらしいですがこれは後述します。
メールアドレスを記入して"Verify My Email Address"を選択します。送られてきたメールアドレスのURLにアクセスします。
"Your Details"の空欄を全て埋めます。無料なのでクレジットカード情報や本名を記入する必要はありませんでした。SMS認証もないので電話番号もデタラメでOKでしょう。完了したら"Complete Order"を選択します。
ドメイン設定
一旦ホームに戻りログインします。
右上の折りたたみバーから"Service" → "My Domains"を選択します。
"Status" がActiveになっていたら使える状況ってことなんですかね。"Manage Domain" → "Management Freenom DNS"を選択します。
・name - www(自由)
・Type - CNAME
・TTL - 3600
・Target - hatenablog.com
以上のように記入したら、"Save Changes"を選択してドメインの設定は完了です。
ドメインとブログの紐付け
あとは簡単ですね。
はてなブログに移動して、ダッシュボード → ドメインを設定するブログ → 設定 → 詳細設定に移動します。
独自ドメインの入力フォームに先程取得したドメインを記入して設定します。
テスト用ブログに設定してみました。ドメインは一瞬で移行されるみたいです。
注意点など
Freenomのサポートページから重要そうなものを抜粋してみました。
Q,WHOISについて
Freenomまたはその子会社はWHOISでライセンシーとして表示されますQ, 無料ドメインの更新期間について
1ヶ月から12ヶ月です。 各登録期間の最後の15日間(有効期限までの15日間)に無料ドメイン名を更新することができます。 有料ドメイン名は、1年間から10年間まで登録することができます。Q, 私のドメインが無効になることはありますか?
1〜12ヶ月間、選択したドメイン名を使用することができます。 あなたが期限内にドメイン名を更新しない場合登録は解除されます。 各登録期間の最後の15日間に無料ドメインの無料更新ができます。 あなたのウェブサイトが長期間停止している場合や受け入れ難い内容、またはアップロードしていない場合、そのドメインはキャンセルされます。 その結果あなたのドメイン名は、無料または有料登録する他の登録者に対して自動的に利用可能になる可能性があります。
Freenomで取得したドメインを実際に使っている方や、無料ドメインについてデメリットなど述べている方を以下のURLにまとめてみました。
【仮想通貨】bitFlyer LightningをAPIを使わずにスクレイピングする【Python】
今回は「Selenium」と「PhantomJS」を使ってリアルタイムでbitFlyer Lightningの価格を取得していきたいと思います。
bitFlyerはAPIを提供していますが、1分間にリクエストできる回数が200回と決まっています。そこでseleniumを使ってこのウェブページから直接価格を抜くことで無制限に使うことができます。
PhantomJSはウェブブラウザーと同様の振る舞いができるのでサーバーに過度な負担を与えること無く、無限に価格を取り出せます。コード見てさっさと使いたいって人は目次から一気にコードに飛んで下さい。
使った環境
・MacBook Air Early 2015 Sierra 10.12.6
・Python3.6.2 pip3
・iTerm2(コマンドプロント)
・Chrome
準備するもの
・PhantomJS(http://phantomjs.org/)
・Selenium(pip3 install selenium)
・BeautifulSoup(pip3 install beautifulsoup4)
・re(標準モジュール)
・bitFlyerのアカウント
PhantomJSはpathを通して使える状態にしておいてください。
スクレイピングの概要
ログイン
まずはbitFlyer Lightningのログイン画面に行きます。
右クリックで「検証」を押します。入力フォームである「input要素」をHTMLから探します。(HTML用語はは分からないので。。。。雰囲気でやってます。。)
ありましたね。「LoginId」というのがメールアドレス(ID)の入力フォームのようです。
パスワードの入力フォームは「Password」でした。
次にログインボタンを押します。「Login_btn」というのがボタンのようですね。これでログインすることができるようになったので、コードにまとめます。
from selenium import webdriver from time import sleep from bs4 import BeautifulSoup as bs import re ma = "メールアドレス" pw = "パスワード" #関数Loginにログインするための一連の動作をまとめました def Login(): #「bitFlyer Lightning」に移動 driver = webdriver.PhantomJS() driver.get("https://lightning.bitflyer.jp") #メールアドレスを入力 login_id = driver.find_element_by_id("LoginId") login_id.send_keys(ma) #パスワードを入力 login_pw = driver.find_element_by_id("Password") login_pw.send_keys(pw) #ログインボタンをクリック driver.find_element_by_id('login_btn').click()
文字列出力
これでログインすることができるようになったので、ブラウザでもログインしてみます。次に抜き出したい情報を選びます。今回は買値のみを抜いてみます。さっきと同様に右クリックして「検証」をします。
「command + f」でaskなどで検索したら「Best_Ask」という要素を発見しました。
<option value="ASK">Best Ask (現在 1,271,391)</option>
この中にある文字列部を抽出するために正規表現を使います。
#ページのソースをutf-8でエンコード。。。? #BeautifulSoupでhtmlにパースする html = driver.page_source.encode("utf-8") soup = str(bs(html,"html.parser")) #正規表現のパターン #htmlの中からパターンを抽出 #findallでリストが返ってくるのでインデックスに0を指定して出力 p = '<option value="ASK">(.+)</option>' m = re.findall(p,soup) print(m[0])
さっきのコードとくっつけて実行してみます。
Best Ask (現在 1,267,000)
できましたね。
コード
全体像
from selenium import webdriver from time import sleep from bs4 import BeautifulSoup as bs import re ma = 'メールアドレス' pw = 'パスワード' def Login(): driver = webdriver.PhantomJS() driver.get('https://lightning.bitflyer.jp/?lang=ja') login_id = driver.find_element_by_id("LoginId") login_id.send_keys(ma) login_pw = driver.find_element_by_id("Password") login_pw.send_keys(pw) driver.find_element_by_id("login_btn").click() while True: html = driver.page_source.encode("utf-8") soup = str(bs(html,"html.parser")) p = '<option value="ASK">(.+)</option>' m = re.findall(p,soup) print(m[0]) if __name__ == '__main__': Login()
htmlをパースして正規表現で抜き出す処理を無限ループさせています。メールアドレスとパスワードをそれぞれ変数maとpwに入れて実行します。