🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
スクレイピング

スクレイピングとは、公開されているWebサイトからページ内の情報を抽出する技術です。

WordPress

WordPressは、PHPで開発されているオープンソースのブログソフトウェアです。データベース管理システムにはMySQLを用いています。フリーのブログソフトウェアの中では最も人気が高く、PHPとHTMLを使って簡単にテンプレートをカスタマイズすることができます。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

1回答

3923閲覧

pythonでスクレイピングしてWordPressの自分のサイトに自動投稿したい

Ichiro08

総合スコア8

スクレイピング

スクレイピングとは、公開されているWebサイトからページ内の情報を抽出する技術です。

WordPress

WordPressは、PHPで開発されているオープンソースのブログソフトウェアです。データベース管理システムにはMySQLを用いています。フリーのブログソフトウェアの中では最も人気が高く、PHPとHTMLを使って簡単にテンプレートをカスタマイズすることができます。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2021/02/01 10:02

編集2021/02/02 07:32

やりたいこと

pythonでスクレイピングしてWordPressの自分のサイトに自動投稿したい

できていないこと

~~下記の参考サイトのコードを打つと
<Response [403]>
が返ってくる。
~~

下記のサイトで解決しました!
[WordPress]WP REST APIを使おうとすると403(Forbidden Access)エラーになる

しかし、今度は
<Response [401]>
が返ってくるようになりました。。


環境

Google Colaboratoryを使っています。

参考サイト

[Python]WordPressの自動投稿をしてみた
参考サイトのコード

python

1# Pythonのお勉強 No.4 WordPressの自動投稿 2import requests 3import urllib 4from bs4 import BeautifulSoup 5from datetime import datetime 6 7# スクレイピング対象 8url = 'https://news.google.com/search' 9keyword = "香川真司 OR 久保建英" 10params = {'hl':'ja', 'gl':'JP', 'ceid':'JP:ja', 'q':keyword} 11 12# WordPress接続情報 13WP_URL = 'https://xxxx.com' 14WP_USERNAME = 'userName' 15WP_PASSWORD = 'xxxx xxxx xxxx xxxx xxxx xxxx' 16 17# WordPress新規投稿関数 18def post_article(status, slug, title, content, category_ids, tag_ids, media_id): 19 20 # REST APIを使うための認証情報 21 user_ = WP_USERNAME 22 pass_ = WP_PASSWORD 23 # 投稿記事情報 24 payload = {"status": status, #ステータス 公開:publish, 下書き:draft 25 "slug": slug, #URLスラッグ 26 "title": title, #タイトル 27 "content": content, #内容 28 "date": datetime.now().isoformat(), #投稿日時 29 "categories": category_ids, #カテゴリー 30 "tags": tag_ids} #タグ 31 if media_id is not None: 32 payload['featured_media'] = media_id #アイキャッチ画像 33 34 # 記事の新規投稿を行う 35 res = requests.post(urllib.parse.urljoin(WP_URL, "wp-json/wp/v2/posts"), #"wp-json/wp/v2/posts"にPostすると新規投稿になる 36 json=payload, #投稿する記事の内容を設定する 37 auth=(user_, pass_)) #ユーザ、パスワードを設定する 38 return res 39 40# スクレイピング対象のURLにリクエスト 41res = requests.get(url, params=params) 42soup = BeautifulSoup(res.content, "html.parser") 43 44# レスポンスからh3階層のニュースを1件抽出する 45h3_entry = soup.select_one(".xrnccd") 46 47# ニュースのリンク先URLを取得し、整形してフルパスの<a>タグを作る 48h3_link = h3_entry.select_one("h3 a")["href"] 49h3_link = urllib.parse.urljoin(url, h3_link) 50content = '<a href="' + h3_link + '">' + h3_link + '</a>\n' 51 52# 記事を下書き投稿する 53post_article('draft', 54 'WordPress-New-Post', 55 '【動作確認】WordPress自動投稿', 56 content, 57 category_ids=[2], 58 tag_ids=[5,6], 59 media_id=759)

確認したいこと

WordPress接続情報
WP_URL = 'https://xxxx.com'
WP_USERNAME = 'userName'
WP_PASSWORD = 'xxxx xxxx xxxx xxxx xxxx xxxx'


ここのところだけはは自分のものに変えました。

WP_USERNAMEとWP_URLは下記の画像のものですよね?
WP_PASSWORDはApplication Passwordsで生成されたやつですよね?

WP_USERNAMEはこれですよね?
イメージ説明


他にも変更しないといけない所があるのでしょうか?
わかりづらいとは思いますがよろしくお願いします!!

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

401エラーだと認証失敗の可能性が高いです。

こちらのサイトが参考になるかもしれません。

WordPressのRESTAPIでアプリケーションパスワードの認証がとおらないなら

投稿2021/02/01 13:50

hiok

総合スコア595

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Ichiro08

2021/02/02 07:14

ありがとうございます! 追記したのですが、やはり駄目でした。。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.36%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問