まああんまり大っぴらにnitterのRSS使ってるっていうのもあれなんですが、
今n8nで動かしている鳥関連BOTがAPIの関係で使えなくなるのが見えているのでnitterを使う形に以降させました。

n8nでこういったやつをやるのは過去に書いているので細かいことは書きません。

RSSだとタイトルに全文が入っていて、別でHTMLがあるのでそこからメディアがあったら抽出してくっつけています。

あとはリンクをnitterからtwitter.comに変えてモロヘイヤで投稿するだけ。

まあなんてことはない普通の感じです。

とりあえずこれ使ってみますが、nitterもAPIの影響を受けるならこれも使えなくなるし、まあそしたら諦めですね。

せっかくだからちょっとだけ詳細

RTとリプの削除

これはIFで実装します。

単純にRTとリプに該当する文字列を検知して除外するだけ

新着チェック

これは汎用型新着チェックで、RSSでは基本これ使っておけばおkです。

ここで逆順にするのが重要。

const staticData = $getWorkflowStaticData('global');
var pushitems = [];

if (staticData.lastIsoData === undefined) {
  lastUnixDate = Date.parse('01 Jan 1970 00:00:00 GMT');
} else {
  lastUnixDate = Date.parse(staticData.lastIsoData);
}

items.reverse().forEach((val, index) => {
  currentIsoDate = val.json.isoDate ;
  currentUnixDate = Date.parse(currentIsoDate);
  if (lastUnixDate < currentUnixDate) { 
    staticData.lastIsoData = currentIsoDate;
    pushitems.push(val);
  }
});

return pushitems;

画像URLの抽出

HTML Extract使えば該当属性からデータを持ってこれるので便利。

imgのsrcを探して配列で返してます。

マージ

マージを使って抽出した画像URLを元のデータに追加してます。

モロヘイヤWebhook用のbody作成

雑ですがサクッとやってます。

ここでまあ色々と・・・。

var pushitems = [];
var attachments = [];

items.forEach((val, index) => {
  attachments = [];
  let full_text = val.json.title;
  let link = val.json.link.replace("nitter.net", "twitter.com");
  link = link.replace("nitter.lacontrevoie.fr", "twitter.com");
  link = link.replace("nitter.kavin.rocks", "twitter.com");
  link = link.replace("#m", "");
  if (val.json.media_url.length){
    let media = val.json.media_url;
    media.forEach((v) => {
      v = v.replace("nitter.net", "pbs.twimg.com");
      v = v.replace("nitter.lacontrevoie.fr", "pbs.twimg.com");
      v = v.replace("nitter.kavin.rocks", "pbs.twimg.com");
      v = v.replace("pic/media%2F", "media/");
      if (v.indexOf("card_img") == -1) {
        attachments.push({"image_url": v});
      }
    });
    if (attachments.length ){
      pushitems.push({ body: {"text": full_text + "\n#precure_fun\nvia " + link, "attachments": attachments }});
    }else{
      pushitems.push({ body: {"text": full_text + "\n#precure_fun\nvia " + link}});
    }
  }else{
    pushitems.push({ body: {"text": full_text + "\n#precure_fun\nvia " + link}});
  }
});

return pushitems;

追記

nitter不安定時にほかも見る

RSSの設定で、Execute OnceContinue On Failをオンにして、その後のIFに{{ $json["title"] }} is Emptyとかやっておくとerrorを検知できるので、それでつなぐ感じ。

これをやったやつを完成図として一番上に貼ってます。


とまあこんな感じです。