Twitterの自動投稿を利用して、はてなブログの記事を宣伝するプログラムの話。

目次。

最近は、ずっと海外大学院の出願準備をしていて、ブログを更新する気があまり起きなかったが、1か月以上、ブログを放置するのもいかがなものかと思ったので、とりあえず何か文章を書こうと思う。ちなみに前回の文章で触れた海外大学院用の奨学金は無事内定を頂きました。ありがとうございます。

 

 

 

なぜ記事URLを自動投稿するのか?

あなたが一生懸命書いたブログ記事。たくさんの人に見てもらいたいと思って、投稿するも、誰にも見てもらえない。きっとこれは、ブログを始めたての頃のあるある。張り切って、ものすごくエネルギーをつぎ込んで書いたのに、周りの反応が微妙。このギャップに凹み、どんどんブログを更新する気力がなくなっていくのは、多分よくある話。

そんなことにもめげず、ブログを更新する方もいらっしゃって、そうなるとブログに記事がどんどん溜まっていく。それは、それでいいのだが、記事がどんどん溜まっていくと、ここで問題点が一つ。

 

記事が溜まるにつれて、一生懸命書いた昔の記事がどんどんブログの奥底へと押しやられてしまい誰にも見てもらえなくなってしまうのである…。

 

これを解決するのが、Twitterを用いた記事URLの自動投稿。ブログの奥底に埋もれた記事も定期的に宣伝すれば、ちゃんと読んでもらえるようになる。

 

 

 

 

よくある方法(Twitterの自動投稿サービス)。

よくあるのがTwitterの自動投稿サービスを使う方法。twittbotとかが有名だと思う。twittbotに自分のアカウントを連携しておいて、tweetしたい文章、時刻を登録しておけば、後は勝手にtwittbotが自動投稿してくれる。宣伝したい記事のURLをtwittbotに登録しておけば、たとえ昔の記事だろうが、Twitter上で自動投稿され、他のユーザーがその記事を見にきてくれる。

 

という感じなのだが、この方法にも欠点がある。

ブログに記事が100本あるとして、その記事を宣伝するtweetを100個、Twitterの自動投稿サービスに登録…。つまり、自動投稿してほしい宣伝tweetを登録するという作業を100回繰り返すのである。言わずもがな面倒くさい。。。

さらに記事を追加、削除したら、いちいち自動投稿サービスのwebページに行って、宣伝tweetの追加、削除をしなければならないのである。面倒くさい。

 

そこら辺の面倒くさい点を全て解決しようというのが、この文章のねらい。

 

 

 

 

記事URLをTwitterで自動投稿するプログラムの作成。

要するに、ブログの更新をするたびに、更新結果をいちいち自動投稿サービスに反映しなればならないのが、面倒くさい要因。じゃあ、自動でブログの記事情報を取ってきて、その記事情報から自動でtweetを作成して投稿するプログラムがあれば、いいじゃないかという話になる。ブログを更新しても、更新結果が反映された記事情報をプログラムが自動で取ってくるので、もう面倒くさくはない。

 

 

はてなブログの記事情報を取ってくる方法。

実は、むちゃくちゃ簡単。Atom Publishing Protocol(AtomPub)というAPIを使えば一瞬。

AtomPubを使うには、API keyと呼ばれるものが必要なので、まずはそれを調べる。API keyは、はてなブログの設定のページに記載されてある。

f:id:sun_ek2:20191130211026p:plain

 

API keyがあれば、これで準備完了。以下、はてなブログの記事情報を取ってきて、必要なデータを抽出するプログラムのコード。

 

import requests
from bs4 import BeautifulSoup

article_titles = []
article_links = []
request_url = 'https://blog.hatena.ne.jp/hatenaID/hatenaID.hatenablog.com/atom/entry'
safety_counter = 0
while request_url != None:
    safety_counter += 1
    r = requests.get(url=request_url, auth=('hatenaID', 'APIkey'))
    soup = BeautifulSoup(r.text, 'html.parser')
    request_url = soup.find('link', rel='next')
    soup.findAll('app:draft')
    if request_url != None:
        request_url = request_url['href']
    temp_article_titles = soup.findAll('title')[1:]
    temp_article_links = soup.findAll('link', rel='alternate', type='text/html')
    draft_check = soup.findAll('app:draft')
    for i in range(len(draft_check)):
        if draft_check[i].string == 'yes':
            temp_article_titles.pop(i)
            temp_article_links.pop(i)
    for i in range(len(temp_article_titles)):
        temp_article_titles[i] = temp_article_titles[i].string
        temp_article_links[i] = temp_article_links[i]['href']
    article_titles.extend(temp_article_titles)
    article_links.extend(temp_article_links)
    if safety_counter > 10:
        break

print(article_titles)
print(article_links)

 

 

 

 

OAuth認証を使って、Twitterで自動投稿する方法。

前に散々、TwitterのOAuth認証の話をしたので、詳しくは以下の記事を参照のこと。

blog.sun-ek2.com 

正直言うと、ID、パスワードを使うBasic認証の方が色々、楽なのだが、「OAuth認証以外でTwitterのアカウントを操作すると、アカウントを凍結するぞ」って公式サイトに書いてあるので、OAuth認証でやる。

 

ここからは、Twitterに事前にTwitter APIの使用申請を出して、許可されていることを前提に話を進める。この申請が面倒くさい。僕が使用申請を出したのは、はるか昔、高校生の頃。もう詳しいやり方は覚えていないので、ここでは説明できない。調べればすぐに分かると思う。

 

OAuth認証じゃなくて、IDとパスワードでアカウントを制御するBasic認証をやりたい方は、以下の記事が参考になると思う。証券会社のサイトに自動ログインするプログラムを書いた話であるが、Twitterのサイトもやり方は同じ。Twitter社は、OAuth認証以外やめろって言っているので、これは自己責任で。

blog.sun-ek2.com 

このプログラムは、一時間に一回、ランダムに記事URL付きの宣伝tweetを投稿する。

import tweepy
import random
import time

onsumer_key='XXXXXXXXXXXXXXXXXXXX'
consumer_secret= 'XXXXXXXXXXXXXXXXXXXX'
access_token_key='XXXXXXXXXXXXXXXXXXXX'
access_token_secret='XXXXXXXXXXXXXXXXXXXX'

auth = tweepy.OAuthHandler(consumer_key, consumer_secret)
auth.set_access_token(access_token_key, access_token_secret)
api = tweepy.API(auth)

while True:
    n = random.randint(0,len(article_titles)-1)
    tweet_status = article_titles[n]+'\n'+article_links[n]
    api.update_status(status=tweet_status)
    time.sleep(60*60)

 

 

僕もはてなブログの記事URL付きのtweetを自動投稿している。このアカウントは、現在開発している株式の自動売買プログラムの出力結果を自動投稿しているのだが、それに加えて、定期的にブログ記事の宣伝もしている。

 

twitter.com

 

ブログランキング・にほんブログ村へ
にほんブログ村