[スポンサーリンク]
WordPressの過去記事を自動ツイート
WordPressで投稿した過去記事を、ランダムでツイートをしてみます
最近触ってみたAPIを使用して実現します
- TwitterAPIを使用してPythonでツイート
- BitlyAPIを使用して短縮URLを取得
- WordPressAPIを使用して投稿した過去記事を取得
- WordPressAPIを使用して投稿に関連付けられたカテゴリ&タグを取得
TwitterAPIを使用してPythonでツイート
Python3でTwitterAPI使用する準備として、下記を行いました
①APIキーとトークンの取得
②ライブラリのインストール
その後、POST statuses/update APIを使用して、ツイートを行いました
BitlyAPIを使用して短縮URLを取得
Bitlyに無料アカウントを作成しました
BitlyのWebAPIを利用して、短縮URLを取得しました
WordPressの記事のURLを短縮URLでツイートします
WordPressAPIを使用して投稿した過去記事を取得
WordPressAPIを利用して、過去に投稿した全記事を取得しました
取得した過去記事から、ランダムに1記事を選んでツイートします
WordPressAPIを使用して投稿に関連付けられたカテゴリ&タグを取得
WordPressAPIを利用して、カテゴリとタグの全情報を取得しました
ツイートする記事に関連付けられた、カテゴリやタグの名称を、ツイートタグとしてツイートします
[スポンサーリンク]
サンプルコード
WordPressで投稿した過去記事を、ランダムでツイートをしてみます
過去にページに記録したサンプルコードを、なるべく流用で記載しました
実際に使用する場合は、下記の点考慮が必要です
・アカウント情報の外出し
・エラーハンドリング
・ループ条件検討 etc.
WordPressの記事取得の条件に、対象日付を入れることで直近一ヶ月の記事をツイートにする等、APIのパラメータ変更だけで、カスタマイズがいろいろ出来ます
ツイートタグに、カテゴリやタグを設定出来ているので、タグから検索もして貰えます
ツイートアナリティスクの画面でも分かるように、Bitlyの短縮URLでツイート出来ているので、コメントに使用出来る文字数も多く出来ます
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 |
# coding: utf_8 # モジュールインポート import json import requests import random from requests_oauthlib import OAuth1Session ################################################## # # WordPress、Bitly、Twitter設定 # ################################################## # ツイート対象のWordPressサイトURL TargetUrl = 【ツイート対象のWordPressサイトURL】 # Bitlyのアクセストークン BitlyGetShortenUrlApiAccessToken = 【BitlyAccessToken】 # TwitterのAPIキー&トークン設定 ConsumerAPIKey = 【ConsumerKey】 ConsumerAPIsecretkey = 【ConsumerSecretKey】 AccsessToken = 【AccessToken】 AceestokenSecret = 【AccessTokenSecret】 ################################################## # # <関数>WordPress過去投稿の全記事取得 # ################################################## def GetWordPressPosts(TargetUrl): # WordPressページ数取得(パラメータ設定) EndpointPosts = '/wp-json/wp/v2/posts' ArticleNumPerPage = 100 PostsTargetApiUrl = TargetUrl + EndpointPosts # WordPressページ数取得 PostsHeadParameters = { 'per_page' : ArticleNumPerPage } PostsHeadResponse = requests.head(PostsTargetApiUrl, params = PostsHeadParameters) if PostsHeadResponse.status_code == 200: PostsHeadResult = PostsHeadResponse.headers MaxPage = int(PostsHeadResult['X-WP-TotalPages']) ArticleList = [] for i in range(1, MaxPage + 1): # WordPress全記事取得(パラメータ設定) PostsGetParameters = { 'page' : i, 'per_page' : ArticleNumPerPage, 'order' : 'desc' } # WordPress全記事取得 PostsGetResponse = requests.get(PostsTargetApiUrl, params = PostsGetParameters) if PostsGetResponse.status_code == 200: PostsGetResult = json.loads(PostsGetResponse.text) ArticleList.extend(PostsGetResult) else: print("WordPress過去記事情報取得に失敗") print(PostsGetResponse) exit() else: print("WordPress過去記事ヘッダー情報取得に失敗") print(PostsHeadResponse) exit() return ArticleList ################################################## # # <関数>WordPress全カテゴリ取得 # ################################################## def GetWordPressCategories(TargetUrl): # WordPressページ数取得(パラメータ設定) EndpointCategories = '/wp-json/wp/v2/categories' CategoriesTargetApiUrl = TargetUrl + EndpointCategories CategoryNumPerPage = 100 # WordPressページ数取得 CategoriesHeadParameters = { 'per_page' : CategoryNumPerPage } CategoriesHeadResponse = requests.head(CategoriesTargetApiUrl, params = CategoriesHeadParameters) if CategoriesHeadResponse.status_code == 200: CategoriesHeadResult = CategoriesHeadResponse.headers MaxPage = int(CategoriesHeadResult['X-WP-TotalPages']) CategoryList = [] for i in range(1, MaxPage + 1): # WordPress全カテゴリ取得(パラメータ設定) CategoriesGetParameters = { 'page' : i, 'per_page' : CategoryNumPerPage, 'order' : 'asc', 'orderby' : 'id' } # WordPress全カテゴリ取得 CategoriesGetResponse = requests.get(CategoriesTargetApiUrl, params = CategoriesGetParameters) if CategoriesGetResponse.status_code == 200: CategoriesGetResult = json.loads(CategoriesGetResponse.text) CategoryList.extend(CategoriesGetResult) else: print("WordPressカテゴリ情報取得に失敗") print(CategoriesGetResponse) exit() else: print("WordPressカテゴリヘッダー情報取得に失敗") print(CategoriesHeadResponse) exit() return CategoryList ################################################## # # <関数>WordPress全タグ取得 # ################################################## def GetWordPressTags(TargetUrl): # WordPressページ数取得(パラメータ設定) EndpointTags = '/wp-json/wp/v2/Tags' TagsTargetApiUrl = TargetUrl + EndpointTags TagNumPerPage = 100 # WordPressページ数取得 TagsHeadParameters = { 'per_page' : TagNumPerPage } TagsHeadResponse = requests.head(TagsTargetApiUrl, params = TagsHeadParameters) if TagsHeadResponse.status_code == 200: TagsHeadResult = TagsHeadResponse.headers MaxPage = int(TagsHeadResult['X-WP-TotalPages']) TagList = [] for i in range(1, MaxPage + 1): # WordPress全タグ取得(パラメータ設定) TagsGetParameters = { 'page' : i, 'per_page' : TagNumPerPage, 'order' : 'asc', 'orderby' : 'id' } # WordPressタグ事取得 TagsGetResponse = requests.get(TagsTargetApiUrl, params = TagsGetParameters) if TagsGetResponse.status_code == 200: TagsGetResult = json.loads(TagsGetResponse.text) TagList.extend(TagsGetResult) else: print("WordPressタグ情報取得に失敗") print(TagsGetResponse) exit() else: print("WordPressタグヘッダー情報取得に失敗") print(TagsHeadResponse) exit() return TagList ################################################## # # <関数>Bitly短縮URL取得 # ################################################## def GetBitlyShorUrl(BitlyTargetLongUrl): # パラメータ設定 BitlyGetShortenUrlApiHost = 'api-ssl.bitly.com' BitlyGetGroupsUrl = 'https://api-ssl.bitly.com/v4/groups' BitlyGetShortenUrlApiUrl = 'https://api-ssl.bitly.com/v4/shorten' # guid取得 BitlyGetShortenUrlHeaders = { 'Host' : BitlyGetShortenUrlApiHost ,'Authorization' : BitlyGetShortenUrlApiAccessToken ,'Content-Type' : 'application/json' } BitlyGetGuidResPonse = requests.get(BitlyGetGroupsUrl, headers = BitlyGetShortenUrlHeaders) if BitlyGetGuidResPonse.status_code == 200: BitlyGetGuidResult = json.loads(BitlyGetGuidResPonse.text) # 短縮URL取得 BitlyGetShortenUrlParameters = { 'long_url' : BitlyTargetLongUrl ,'group_guid' : BitlyGetGuidResult['groups'][0]['guid'] } BitlyGetShortenUrlResponse = requests.post(BitlyGetShortenUrlApiUrl, headers = BitlyGetShortenUrlHeaders, json = BitlyGetShortenUrlParameters) if BitlyGetShortenUrlResponse.status_code == 200 or BitlyGetShortenUrlResponse.status_code == 201: BitlyGetShortenUrlResult = json.loads(BitlyGetShortenUrlResponse.text) else: print("Bitly短縮URL取得に失敗") print(BitlyGetShortenUrlResponse) exit() else: print("Bitlyguid取得に失敗") print(BitlyGetShortenUrlResponse) exit() return BitlyGetShortenUrlResult['link'] ################################################## # # <関数>ツイート投稿 # ################################################## def PostTweet(TweetStatus): # ツイートパラメータ設定 POSTstatusesupdateParameters = { 'status' : TweetStatus ,'in_reply_to_status_id' : '' ,'auto_populate_reply_metadata' : '' ,'exclude_reply_user_ids' : '' #attachment_urlは有効なURLを指定しない場合、例外が発生(HTTP400) #,'attachment_url' : '' ,'media_ids' : '' ,'possibly_sensitive' : '' ,'lat' : '' ,'long' : '' ,'place_id' : '' ,'display_coordinates' : '' ,'trim_user' : '' ,'enable_dmcommands' : '' ,'fail_dmcommands' : '' ,'card_uri' : '' } POSTstatusesupdateApiSession = OAuth1Session(ConsumerAPIKey, ConsumerAPIsecretkey, AccsessToken, AceestokenSecret) POSTstatusesupdateApiUrl = 'https://api.twitter.com/1.1/statuses/update.json' # ツイート実行 POSTstatusesupdateResponse = POSTstatusesupdateApiSession.post(POSTstatusesupdateApiUrl, params = POSTstatusesupdateParameters) if POSTstatusesupdateResponse.status_code == 200: POSTstatusesupdateResult = json.loads(POSTstatusesupdateResponse.text) print("過去投稿記事のツイート成功") print(POSTstatusesupdateResult) else: print("Tweetに失敗") print(POSTstatusesupdateResponse) exit() ################################################## # # 本処理 # ################################################## # 過去投稿の全記事/カテゴリ/タグ取得 WordPressArticleList = GetWordPressPosts(TargetUrl) WordPressCategoryList = GetWordPressCategories(TargetUrl) WordPressTagList = GetWordPressTags(TargetUrl) # ツイート対象を過去記事からランダムで選択 TweetTargetWPArticletNo = random.randint(0, len(WordPressArticleList)-1) # ツイート対象の記事の短縮URLを取得 TweetTargetWPArticleUrl = GetBitlyShorUrl(WordPressArticleList[TweetTargetWPArticletNo]['link']) # ツイートステータス設定 TweetStatus = "<タイトル>" + WordPressArticleList[TweetTargetWPArticletNo]['title']['rendered'] TweetStatus += "\n<カテゴリ>" for TweetTargetCategoryItem in WordPressArticleList[TweetTargetWPArticletNo]['categories']: for WordPressCategoryItem in WordPressCategoryList: if TweetTargetCategoryItem == WordPressCategoryItem['id']: TweetStatus += "#" + WordPressCategoryItem['name'] + ' ' break else: pass TweetStatus += "\n<タグ>" for TweetTargetTagItem in WordPressArticleList[TweetTargetWPArticletNo]['tags']: for WordPressTagItem in WordPressTagList: if TweetTargetTagItem == WordPressTagItem['id']: TweetStatus += "#" + WordPressTagItem['name'] + ' ' break else: pass TweetStatus += TweetTargetWPArticleUrl # ツイート投稿 PostTweet(TweetStatus) |
[スポンサーリンク]
コメント