🙄

Pythonを使ってDrupalにコンテンツを追加する

2023/04/11に公開

概要

Pythonを使ってDrupalにコンテンツを追加する機会がありましたので、その備忘録です。以下の記事を参考にしました。

https://weimingchenzero.medium.com/use-python-to-call-drupal-9-core-restful-api-to-create-new-content-9f3fa8628ab4

Drupalの準備

Amazon Lightsailに作成しました。以下の記事などが参考になります。

https://annai.co.jp/article/use-aws-lightsail

モジュール

以下をインストールします。

  • HTTP Basic Auth
  • JSON:API
  • RESTful Web Services
  • Serialization

JSON:APIの設定変更

以下にアクセスして、設定を変更します。

</admin/config/services/jsonapi>

Python

{ipアドレス or ドメイン名}、{パスワード}を適宜設定してください。

Amazon Lightsailの場合、初期ユーザ名はuserです。またパスワードは以下のコマンドで確認します。

cat ~/bitnami_application_password
import requests
from requests.auth import HTTPBasicAuth

endpoint = 'http://{ipアドレス or ドメイン名}/jsonapi/node/article'

u = 'user'
p = '{パスワード}'

headers = {
    'Accept': 'application/vnd.api+json',
    'Content-Type': 'application/vnd.api+json'
}
payload = {
    "data": {
        "type": "node--article",
        "attributes": {
            "title": "What's up from Python",
            "body": {
                "value": "Be water. My friends.",
                "format": "plain_text"
            }
        }
    }
}

r = requests.post(endpoint, headers=headers, auth=(u, p), json=payload)
r.text

その他

以下のようにnote_typeの登録も試みました。

payload = {
    "data": {
        "type": "node_type--node_type",
        "attributes": {
            "title": "テスト",
            "description": "node_typeのテストです。"
        }
    }
}

url = f"{host}/jsonapi/node_type/node_type"
r = requests.post(url, headers=headers, auth=(username, password), json=payload)
r.json()

結果、以下のように、Method Not Allowedとなりました。

{'jsonapi': {'version': '1.0',
  'meta': {'links': {'self': {'href': 'http://jsonapi.org/format/1.0/'}}}},
 'errors': [{'title': 'Method Not Allowed',
   'status': '405',
   'detail': 'No route found for "POST /jsonapi/node_type/node_type": Method Not Allowed (Allow: GET, HEAD)',
...

引き続き調査を続けたいと思います。

まとめ

Headless CMSとしてDrupalを活用するために、引き続き調査を行いたいと思います。

Discussion