🕌

Pythonを使ってDrupalのコンテンツを更新・削除する

2023/04/11に公開

概要

以下の記事で、コンテンツの新規登録の方法を記載しました。

https://zenn.dev/nakamura196/articles/1cc654fc266d17

今回は、既存のコンテンツの更新・削除を試みます。

アイテムの絞り込み

以下のようなプログラムにより、登録済みのコンテンツを取得することができます。今回は、titleが「更新前のタイトル」のコンテンツを取得しました。res["data"]は配列になります。

username = "xxx"
password = "xxx"
host = "xxx"

query = {
    "title": "更新前のタイトル"
}

item_type = "article"

filters = []

for key, value in query.items():
    filters.append(f'filter[{key}]={value}')

filter_str = '&'.join(filters)

endpoint = f'{host}/jsonapi/node/{item_type}?{filter_str}'

r = requests.get(endpoint, headers=headers, auth=(username, password))

res = r.json()

len(res['data'])

更新対象のコンテンツのID取得

730f844d-b476-4485-8957-c33fccb7f8acのようなIDが得られます。

item = res['data'][0]
item_id = item['id']

更新

typeidを指定して更新します。

payload = {
    "data": {
        "type": f"node--{item_type}",
        "id": item_id,
        "attributes": {
            "title": "更新後のタイトル"
        }
    }
}

url = f"{host}/jsonapi/node/{item_type}/{item_id}"
r = requests.patch(url, headers=headers, auth=(username, password), json=payload)

r.json()

削除

削除は以下で実行できました。

requests.delete(url, auth=(username, password))

まとめ

プログラムからDrupal上のコンテンツの編集する際などの参考になりましたら幸いです。

Discussion