Search

wordpress記事をtwitterに投稿する

2015年10月19日

いきさつ

記事をtwitterにアップしてみたかった。

WordPress 4.1.7を使っているが、「Tweet old post」、「Tweetily」を使ったが正常に投稿できない。
「Buffer My Post」も使ってみたが、無料だと10回までしか投稿できなかった。

そのため、自作で対応した。

対応内容

script: python, bash
定期実行:cron

script

OAuth1Session、requests_oauthlib、MySQL-python、python-develが必要となる。

# easy_install OAuth1Session
# easy_install requests requests_oauthlib
# easy_install MySQL-python
# yum install python-devel

※mysql以外を使用している人は対象DB用のコネクタが必要

twit_up.py
#!/usr/bin/python
# -*- coding: utf-8 -*-

import MySQLdb
import random
import os
from requests_oauthlib import OAuth1Session

#
# function to take out one at random
#
def random_choice_unique(lists, num=1):
    if not lists:
        return []

    if len(lists) <= num:
        return lists

    copy_lists = lists[:]
    results = []
    for i in range(num):
        t = random.choice(copy_lists)
        results.append(t)

    return results

#
# function to retrieve the article from db
#
def get_article():
    connection = MySQLdb.connect(host="localhost", db="*****", user="*****", passwd="*****", charset="utf8")
    cursor = connection.cursor()
    # SQL
    cursor.execute("""select wpp.post_name
         , wpp.post_title
         , wpt.slug
         , CONCAT((SELECT `wp_options`.`option_value` FROM `wp_options` WHERE `wp_options`.`option_id` = 1), '/', wpt.slug, '/', wpp.post_name) AS 'url'
      from wp_posts wpp
         , wp_term_relationships wptr
         , wp_term_taxonomy wptt
         , wp_terms wpt
     where wpp.id = wptr.object_id
       and wptr.term_taxonomy_id = wptt.term_taxonomy_id
       and wpt.term_id = wptt.term_id
       and wpp.post_status in ('publish')
       and wpp.post_type = 'post'
    """)
    result = cursor.fetchall()

    r = random_choice_unique(result)

    param = {}
    for row in r:
        params = {"status": row[1]+" "+row[3]}

    cursor.close()
    connection.close()

    return params

if __name__ == '__main__':

    CK = '**********************'                             # Consumer Key
    CS = '******************************************'         # Consumer Secret
    AT = '********-*****************************************' # Access Token
    AS = '******************************************'         # Accesss Token Secert

    # url for the tweet post
    url = "https://api.twitter.com/1.1/statuses/update.json"

    # tweet text
    params = get_article()

    # it will post in the POST methed with OAth authentication
    twitter = OAuth1Session(CK, CS, AT, AS)
    req = twitter.post(url, params = params)

    # we see the response
    if req.status_code == 200:
        print ("OK")
    else:
        print ("Error: %d" % req.status_code)

※consumer keyなどの情報は下記を参照した。
Twitterアプリケーションの作成

twit_up.sh

mysqlclientは別途インストールしたものを使用するため、作成。
私の環境では、postfixが古いmysqlclientを使っており、ld.so.confを書き換えられなかった。
そのため、プログラムごとに「LD_LIBRARY_PATH」を設定している。

 システムで統一して同一のmysqlclientを使用する場合は、不要

#!/bin/bash

export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/mysql/lib/

/root/script/twit_up.py
cron設定

4時間ごとに動作させる。

0 */4 * * * /root/script/twit_up.sh > /root/script/twit_up.log 2>&1

参考

ありがとうございました。

http://netaone.com/wp/tweet-old-post/

http://webnaut.jp/develop/633.html
http://qiita.com/ota42y/items/9918789e40f657494024
http://qiita.com/yubais/items/dd143fe608ccad8e9f85
http://d.hatena.ne.jp/s-n-k/20080512/1210611374
http://tt-house.com/2011/11/centos5-7-mysql5-5-pytho.html
http://linuxserver.jp/%E3%82%B5%E3%83%BC%E3%83%90%E6%A7%8B%E7%AF%89/db/mysql/%E5%A4%96%E9%83%A8%E6%8E%A5%E7%B6%9A%E8%A8%B1%E5%8F%AF%E8%A8%AD%E5%AE%9A
http://www.pythonweb.jp/tutorial/string/index6.html
http://website-planner.com/twitter%E3%82%A2%E3%83%97%E3%83%AA%E3%82%B1%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%B3%E3%81%AE%E4%BD%9C%E6%88%90%EF%BC%88consumer-key%E3%80%81consumer-secret%E3%80%81access-token%E3%80%81access-token-secret/

以上