Python Webアプリケーション

【Python】WordPressにAPI経由で記事を投稿すると「500 db insert error」が返される

この記事は約3分で読めます。

 

こんにちは、ミナピピン(@python_mllover)です。

 

特定のサイトの情報をスクレイピングして投稿するプログラムを作成したのですが、時々、投稿がDBに登録されず、ずっと悩んでいたのですが、ようやく原因が見つかりました。

 

結論から行くと、WordpressのデータベースにであるMysqlの文字コードに起因するエラーでした。というのもワードプレスのMysqlの文字コードは現在エックスサーバーから簡単インストールすると「utf8mb4」なのですが、古いバージョンではUTF-8みたいです。

 

どちらも一応UTF-8ではあるのですが、MysqlのUTF-8だと日本語・漢字コードが3バイトの範囲に限られているみたいです。これの何の不味いのかというと4バイトの日本語に対応していないので4バイトの日本語情報を入れようとするとdb insert errorが発生するみたいです。(一応4バイトの日本語の例として挙げると竈門禰津子の「禰」などがこれにあたります。)

そのためにMySQLで4バイトの文字情報を扱うために「utf8mb4」というのが後追いで作られたみたいで、2021年の今からワードプレスをインストールする場合はこれが標準なので基本インサートエラーは起きないのですが、古い文字コードがUTF-8 のMysqlだとこのエラーが起きるみたいです。

 

対策

 

Mysqlの文字コードをPHP経由で変更する

 

ワードプレスのテーマのfunction.phpからMysqlの文字コード設定を書き換えるというのが、調べた感じ無難みたいです。

 

やり方については↓参照

参考:https://cravelweb.com/webdesign/wp-customize/post-3987#WordPress

 

Pythonでテキストデータからややこしそうな文字列を抜く

 

utf-8で文字化けする文字はエスケープが付いているのでrawを使ってr'C://user/path/to/~~'みたいな感じでエスケープを強引に無効化するというのも荒業ですが手の1つです。これを文字列を格納した変数に対して使用する場合はrepr()を使います。

 

html_text = '<html><p>竈門禰津子</p></html>'
repr(html_text)

 

 

 


プログラミング・スクレイピングツール作成の相談を受け付けています!

クラウドワークス・ココナラ・MENTAなどでPython・SQL・GASなどのプログラミングに関する相談やツール作成などを承っております!

過去の案件事例:

  • Twitter・インスタグラムの自動化ツール作成
  • ウェブサイトのスクレイピングサポート
  • ダッシュボード・サイト作成
  • データエンジニア転職相談

これまでの案件例を見る

キャリア相談もお気軽に!文系学部卒からエンジニア・データサイエンティストへの転職経験をもとに、未経験者がどう進むべきかのアドバイスを提供します。


スポンサーリンク
/* プログラミング速報関連記事一覧表示 */
ミナピピンの研究室

コメント

タイトルとURLをコピーしました