[スポンサーリンク]
Word Press API
WordPressは、RESTAPIを提供しています
Pythonで、WordPressのRESTAPIを使ってみます
Reference – REST API Handbook | Developer.WordPress.org
The WordPress REST API is organized around REST, and is designed to have predictable, resource-oriented URLs and to use HTTP response codes…
[スポンサーリンク]
投稿の情報を取得 List Posts API
WordPressのRESTAPIを使って、全記事の情報を取得します
記事の情報を取得するには、List Posts APIを使います
Posts – REST API Handbook | Developer.WordPress.org
Schema
パラメータ
List Posts APIのパラメータは以下です
各項目について、メモを残しておきます
記載内容一切保証出来ません
項目名 | 個人的メモ |
context | 取得対象を選択。view, embed, editから選択 |
page | 取得するページ位置を指定 |
per_page | 取得する記事数を指定 |
search | 取得する記事の検索ワードを指定 |
after | 取得する記事の最古日付を指定 |
author | 取得する記事の投稿者を指定 |
author_exclude | 取得する記事から除外する投稿者を指定 |
before | 取得する記事の最古日付を指定 |
exclude | 対象とする記事のIDを指定 |
include | 対象外とする記事のIDを指定 |
offset | 取得結果をオフセットする記事数を指定 |
order | ソート順序を指定。asc, descから選択 |
orderby | ソート方法を指定。author, date, id等から選択 |
slug | 取得する記事のスラッグを指定 |
status | 取得する記事のステータスを指定 |
tax_relation | 取得する記事のタクソノミーを指定 |
categories | 取得する記事のカテゴリを指定 |
categories_exclude | 取得する記事から除外するカテゴリを指定 |
tags | 取得する記事のタグを指定 |
tags_exclude | 取得する記事から除外するタグを指定 |
sticky | 取得する記事を固定表示のみにする場合に指定 |
サンプルコード
・postsのエンドポイントを設定
1 2 3 |
TargetUrl = 【取得対象のWordPressサイトURL】 EndpointPosts = '/wp-json/wp/v2/posts' PostsTargetApiUrl = TargetUrl + EndpointPosts |
・postsのエンドポイントのヘッダー情報を取得
List Postsのレスポンスは、ページングで返ってきます
そこで、ヘッダー情報から総ページ数(X-WP-Total)をまず取得します
そして、総ページ数分リクエストをすることで全記事情報を取得します
1 |
PostsHeadResponse = requests.head(PostsTargetApiUrl, params = PostsHeadParameters) |
・レスポンスの総ページ数を取得
1 |
MaxPage = int(PostsHeadResult['X-WP-TotalPages']) |
・総ページ数分のList Postsのレスポンスを取得
1 |
for i in range(1, MaxPage + 1): |
・postsのエンドポイントのレスポンスを取得
1 |
PostsGetResponse = requests.get(PostsTargetApiUrl, params = PostsGetParameters) |
GETリクエストは、初期設定では認証等は不要です
今回はサンプルコードとして、全記事のタイトルと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 |
# モジュールインポート import json import requests # WordPressページ数取得(パラメータ設定) TargetUrl = 【取得対象のWordPressサイトURL】 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) print("【記事数】" + str(len(ArticleList))) for ArticleItem in ArticleList: print(ArticleItem['title']['rendered'] + " : " + ArticleItem['link']) |
サンプルレスポンス
1記事分のList Postsのレスポンスは以下です
レスポンスには、タイトルやURL以外にも、カテゴリやタグも含まれています
但し、IDの配列となっていて、カテゴリ名称やタグの名称は取得されません
次回は、カテゴリやタグの情報を取得したいと思います
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 |
{ 'id': 708, 'date': '2020-04-29T18:00:00', 'date_gmt': '2020-04-29T09:00:00', 'guid': { 'rendered': 'https://computer.masas-record-storage-container.com/?p=708' }, 'modified': '2020-05-01T10:09:59', 'modified_gmt': '2020-05-01T01:09:59', 'slug': 'poststatusesretweetid', 'status': 'publish', 'type': 'post', 'link': 'https://computer.masas-record-storage-container.com/2020/04/29/poststatusesretweetid/', 'title': { 'rendered': '【Python3】【TwitterAPI】Pythonでツイートをリツイート(POSTstatuses/retweet/:id)' }, 'content': { 'rendered': 【記事コンテンツ(略)】, 'protected': False }, 'excerpt': { 'rendered': 【記事コンテンツ抜粋(略)】, 'protected': False }, 'author': 1, 'featured_media': 623, 'comment_status': 'open', 'ping_status': 'open', 'sticky': False, 'template': '', 'format': 'standard', 'meta': [], 'categories': [3], 'tags': [9, 7], '_links': { 'self': [ { 'href': 'https://computer.masas-record-storage-container.com/wp-json/wp/v2/posts/708' } ], 'collection': [ { 'href': 'https://computer.masas-record-storage-container.com/wp-json/wp/v2/posts' } ], 'about': [ { 'href': 'https://computer.masas-record-storage-container.com/wp-json/wp/v2/types/post' } ], 'author': [ { 'embeddable': True, 'href': 'https://computer.masas-record-storage-container.com/wp-json/wp/v2/users/1' } ], 'replies': [ { 'embeddable': True, 'href': 'https://computer.masas-record-storage-container.com/wp-json/wp/v2/comments?post=708' } ], 'version-history': [ { 'count': 5, 'href': 'https://computer.masas-record-storage-container.com/wp-json/wp/v2/posts/708/revisions' } ], 'predecessor-version': [ { 'id': 791, 'href': 'https://computer.masas-record-storage-container.com/wp-json/wp/v2/posts/708/revisions/791' } ], 'wp:featuredmedia': [ { 'embeddable': True, 'href': 'https://computer.masas-record-storage-container.com/wp-json/wp/v2/media/623' } ], 'wp:attachment': [ { 'href': 'https://computer.masas-record-storage-container.com/wp-json/wp/v2/media?parent=708' } ], 'wp:term': [ { 'taxonomy': 'category', 'embeddable': True, 'href': 'https://computer.masas-record-storage-container.com/wp-json/wp/v2/categories?post=708' }, { 'taxonomy': 'post_tag', 'embeddable': True, 'href': 'https://computer.masas-record-storage-container.com/wp-json/wp/v2/tags?post=708' } ], 'curies': [ { 'name': 'wp', 'href': 'https://api.w.org/{rel}', 'templated': True } ] } } |
[スポンサーリンク]
コメント