
サイボウズのTech系ブログまとめRSSフィードをもとに、いい感じにXに新着記事紹介の投稿をしたい(テスト編)
こんにちは。サイボウズ株式会社 開発本部 People Experienceチーム コネクト支援チームの貴島(@jnkykn)です。コネクト支援チームでは、IFTTTを利用して、サイボウズやサイボウズ・ラボのエンジニアの新着記事をXに投稿しています。今日は、最近取り組んでいる改善について書きます。
いい感じの自動投稿を求めて
現在、IFTTTのAppletに各ブログのRSSフィードをTriggerに設定して、新着記事公開のX投稿をしています。単独のブログのRSSをTriggerにしているAppletもあれば、ZennのPublicationやnoteのマガジンのRSSをTriggerにしているAppletもあります。これらの新着記事の情報が、重複なく投稿ができるのが理想です。
きっかけは、条件が足りていなかったAppletの修正
先日、@cybozuinsideoutの投稿を見て「あれ?重複投稿されている!?」と思った記事がありました。

両方のAppletの投稿条件を確認したところ、TriggerとしてそれぞれのRSSが設定されているだけで、Cybozu Product Designアカウントの記事がCybozu Product Design Magazineに追加されることが考慮できていませんでした。そこで、Cybozu Product Design MagazineのX投稿用のAppletにFilter Codeを追加して、記事のURLがCybozu Product Designアカウントの記事の場合は除外するように修正しました。
Tech系ブログRSSまとめを使えないか?
今回はミスに気がついて修正したのですが、酒井(@sakay_y)さんから「せっかく、サイボウズのTech系ブログRSS(以降「RSSまとめ」と記載)を作ったし、RSSまとめで重複が除外できているので、これが使えると良いかも?」という助言をいただいて、「確かに、Filter Codeで記事に合わせて投稿内容を分けられると良さそう!」と思いました。現在登録中の新着投稿用Appletは14種類あり、そのうち13種類はRSSまとめで集約できています。(1種類はgihyo.jpで連載が始まった「乗りこなせ!モダンフロントエンド」の新着投稿用で、Triggerをgihyo.jpのRSSフィードに、記事のURLが条件に一致するときに投稿するようにFilter Codeを設定しているため除外)TriggerにRSSまとめを設定し、Filter Codeに、各新着記事の条件で投稿内容を設定するように記述できればOKだと思いました。
テスト実装
IFTTTのFilter Codeでは、Twitter.postNewTweet.setTweet()メソッドを使って、投稿内容を設定することができます。ということしかわからず、ドキュメントにX投稿actionのパラメータとの関係は記述されていませんでした。このFilter Codeで設定した文章と、IFTTTのX投稿設定内容の関係を確認したいと思いました。

そこでまず、Cybozu Inside Outブログの新着記事だった場合に、現在のIFTTTで自動投稿している文面と同様の投稿ができることを確認したいと思いました。
Filter Codeに、EntryUrlにhttps://blog.cybozu.io/が含まれていたら、【Cybozu Inside Outの新着記事公開】と投稿するようにしてみました。いきなり@cybozuinsideoutから投稿すると現行のAppletの投稿と重複してしまうので、テスト用にXの鍵アカウントを登録して、そのアカウントが投稿するようにしました。

テスト実行結果から、Twitter.postNewTweet.setTweet()メソッドを使って投稿文を設定すると、actionのパラメータは無視されることがわかりました。
RSSまとめをもとにしたAppletの条件
じつは、個別のRSSをTriggerにする場合と、RSSまとめをTriggerにFilter Codeで条件を判定する場合では、微妙に条件設定が異なる部分がありました。例えば、noteのマガジンは単独のAppletならマガジンのRSSフィードをTriggerに設定すればOKですが、RSSまとめをTriggerにする場合は、newFeedItemのタイトルにマガジンタイトルが含まれていることを条件にする必要があります。また、ブログの場合は、newFeedItemのurlが対象ブログのurlパターンと一致するか?を条件にします。こうして、長い長いFilter Codeを設定してテスト用Appletを見守りました。

ところが、条件判定でmatchメソッドの判定に誤りがあり、Filter Codeが失敗してしまいました。

String.matchの結果、パターンにマッチしなかった場合はnullが返ってくるのを考慮できていなかったのが原因だとわかったので、修正して現在はRSSまとめの新着を待っている状態です。
まとめ
Filter Codeを編集している最中に、何本かの新着記事が公開されて「あああ、間に合わなかった!!」と叫んでいたのですが、こうして記事を書くこともテストになるので、公開後にドキドキしながら結果を見守ります。無事にテスト投稿ができたら、こちらに追記したいと思います。
追記
Filter Codeの投稿条件に一致せず、テスト投稿されませんでした。Filter Codeを確認しなくては。

更新履歴
本記事の「コネクト支援チームの活動マガジン」追加で、テスト投稿されなかったことを追記。@cybozuinsideoutにXアカウントのリンクを適用(2024-10-11)
使用するRSSまとめフィード名をサイボウズのTech系ブログRSSに修正、省略形RSSまとめにもリンクを設定しました。(2024-10-14)