category

Feed Me で取得した情報を元に GraphQL でエントリを作成する #craftcms

2020-05-28

Feed Me はXML,JSONとかを読み込んでエントリを作成、アップデートできる Craft CMS の必須プラグインの一つ。

Feed Me
https://plugins.craftcms.com/f...

Feed Me のドキュメントを見ていたらテンプレートで使う方法もあったので、こちらを試してみた。

Using in your Templates | Feed Me Documentation
https://docs.craftcms.com/feed...

フィードを設定してテンプレートで利用する

ドキュメントにあるように、FeedのURLを指定することでループして取り出すことができるようになる。

{% set params = {
    url: 'https://note.mersy418.com/atom.xml',
    type: 'xml',
    element: 'entry',
    cache: 60,
} %}

{% set feed = craft.feedme.feed(params) %}

{% for node in feed %}
do something
{% endfor %}

element のところは feed 内のどれを使うか?という設定。

別サイトの情報を feed 経由で表示するとかには使えそう。
パースしてどうこうするような方法、プラグインもあったような気がするけれども。

Feedの情報を元にGraphQLでエントリを作成する

Feed Me で取り出した情報を元に GraphQL をつかってエントリを作成することができる。

{% set createEntry %}
mutation($title:String,$url:String){
  save_test_test_Entry(
    authorId: 1,
    title: $title,
    testtext: $url
  ){
    id
    url
  }
}
{% endset %}

{% for node in feed|slice(0,10) %}
{% set variables = {'title': node.title,'url': node.id} %}
{% set createEntries = gql(createEntry, variables) %}
{% endfor %}

とりあえずループを10件にして試してみて、タイトルとURLをそれぞれ title, testtext フィールドにセットしてエントリを作成するようにしてみてエントリが作成できたのを確認。

これ自体は管理画面で Feed Me の設定から当然できる内容ではあるのだけれども、例えばユーザーごとに自分でFeedのURLを指定したいといった時に、 Feed Me の設定を触らせるかどうか?みたいな話にもなる。

そういう時にFeedのURLはユーザーの独自のフィールドに設定してもらって、テンプレートで使うとかをやれるのではないかなぁと。
プラグイン、モジュールで拡張した方が、、、というのはあると思うが。。。

ただ、この方法だとエントリは新規作成のみで、既存エントリの場合にアップデートするとかができないので、そういう用途の場合はまた別の方法を考える必要がある。

テンプレートでやるのでページアクセスとかは必要になるけどこういう方法もありなのかも?ということで試してみた。