📑

Pythonを使ってDrupalのタクソノミーの登録とコンテンツへの追加

2023/04/11に公開

概要

以下のシリーズの続きです。

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

今回は、タクソノミーの登録とコンテンツへの追加を行います。

タクソノミーの登録

事前に、ne_classというタクソノミーをGUIを通じて作成しました。以下のようなURLで一覧できます。

/jsonapi/taxonomy_term/ne_class

以下、新しいタクソノミーを登録するプログラムです。host, username, passwordは適宜設定してください。

payload = {
    "data": {
        "type": "taxonomy_term--ne_class",
        "attributes": {
            "name": "干瀬",
        }
    }
}

_type = "ne_class"

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

以下のような結果が得られます。

{'jsonapi': {'version': '1.0',
  'meta': {'links': {'self': {'href': 'http://jsonapi.org/format/1.0/'}}}},
 'data': {'type': 'taxonomy_term--ne_class',
  'id': '17c70bd6-e6fc-46e2-bb5d-2377ba9c8ab8',
  ...

コンテンツへの追加

事前に、PlaceというコンテンツタイプをGUIを通じて作成しました。また、field_ne_classを作成して、上記のタクソノミーne_classを値の候補として設定しました。

relationshipsidに先程取得したタクソノミーのidを指定しています。

payload = {
    "data": {
        "type": "node--place",
        "attributes": {
            "title": "xxx"
        },
        "relationships": {
            "field_ne_class": {
                "data": {
                    "type": "taxonomy_term--ne_class",
                    "id": "17c70bd6-e6fc-46e2-bb5d-2377ba9c8ab8",
                }
            }
        }
    }
}

_type = "place"

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

まとめ

タクソノミーの追加やコンテンツへの関連付けも機械的に行うことができそうです。他のよりよい方法もあるかと思いますが、参考になりましたら幸いです。

Discussion