API 1.1の更新後にTwitterからRSSフィードを取得する

twitter APIがバージョン1.0からバージョン1.1に更新されたため、次のような古いスタイルのRSSフィードを受信しないという要求は機能しなくなりました。







これは、XML、RSS、およびAtom出力標準のTwitterサポートが終了したためです。 開発者は、そのような要求の割合は小さく、ユーザーにとって無痛に無効化できるという論文で、そのような決定を下したときの動機についてコメントしました。



しかし、私はそれにもかかわらず、そのような機能を見たいと思うユーザーがいると仮定したいです。 このグループでは、以下の物語が実施されます。



すでにシンプソンズにいた。



この問題には多くの解決策があります。 おそらく最も適切なのは、Twitterアカウントにウィジェットを作成し、続いてRSSフィード自体を形成するためにデータをGoogle Appsスクリプトに送信することです。 このソリューションについては、 ここで説明します

しかし、誰もが自分のTwitterアカウントを持っているわけではなく、持っていない人の中には、他の人のツイートを読みたいだけの人もいるでしょう。



厳密に言えば、私が以下で提供する解決策は、実際に誰かのTwitterを読むことではなく、ユーザー名に関するすべての言及を探しているだけです。





始めましょう



この「読み取り」を許可なしに実装するために、perlで作成された既製のスクリプトがあり、そのコードはこのリンクで入手できます。 twitter API 1.1と正常に対話し、便利なRSS形式で検索結果を提供します。 これを使用するには、ページスクリプトを実行する言語としてperlをサポートする自分に属する任意のサーバーにコピーするか、 このアドレスにある既存のインカネーションを使用します。

しかし、彼には1つの重大な欠点があります。

$body = "<![CDATA[" . HTML::Entities::encode_numeric($body) . "]]>";
      
      





ここで、フィールド「title」および「description」は、Unicodeテーブルに対応する特殊文字にエンコードされます。 英語のツイートでは問題ありませんが、ロシア語のツイートでは問題ありません。 RSSクライアントがこのような特殊文字の復号化をサポートしていない場合、ツイートは判読できません。



このスクリプトをサーバーにインストールすることを選択した場合は、1行修正するだけで済みます。それ以外の場合、この問題を解決する方法は2つあります。リモート側とローカルソフトウェア側です。



Feed Notifierを使用してRSSを読み取ります。 彼には特別なキャラクター処理はありません。 処理のサポートは、次のように個別に追加できます。 このソフトウェアは主にpythonで記述されており、そのソースコードはこのアドレスで入手できます。

しかし、私の場合、完全なサーバー側処理のパスに従うことにしました。

さらに苦労することなく、Google Appsスクリプト用のスクリプトが作成され、エンコードされた特殊文字を変換するタスクを実行します。 私は彼のコードを与えます:



 function doGet() { var response = UrlFetchApp.fetch("http://twitrss.me/twitter_user_to_rss/?user=username&fetch=Fetch+RSS").getContentText("Windows-1251"); var decode = XmlService.parse(response); var rootElement = decode.getRootElement(); var channel = rootElement.getChildren("channel"); var items = channel[0].getChildren("item"); for (var i = 0; i < items.length; i++) { var title = items[i].getChildren("title"); var description = items[i].getChildren("description"); var decode_title = new XML('<d>' + title[0].getText() + '</d>'); var decode_description = new XML('<d>' + description[0].getText() + '</d>'); title[0].setText(decode_title.toString()); description[0].setText(decode_description.toString()); } var output = XmlService.getPrettyFormat().format(decode); return ContentService.createTextOutput(output); }
      
      







このスクリプトでは、ユーザー名を、更新を追跡するユーザーの名前に置き換えるだけです。

スクリプトの作成と公開の問題は複雑ではありませんが、独自の特性があります。 まず、スクリプトコードを新しく作成したドキュメントにコピーした後、保存する必要があります。 第二に、スクリプトが実行の許可を要求するように、それを追い払う必要があります。これは後でそれを与えます(「実行」ボタン)。 第三に、すべてのソースからの起動のために公開する必要があります。 匿名。



その結果、次の形式のリンクが作成されます。 script.google.com/macros/s/__/exec





素晴らしい、今ではすべての特殊文字が対応するそれぞれのユニコードに置き換えられるRSSフィードがあります。

RSSクライアントがHTTPSをサポートしている場合は、この記事を終了します。 Feed NotifierはHTTPSをサポートしていません。 原則として、HTTPSのサポート不足の問題は、ソースコードに適切な変更を加えることで解決できます。 しかし、ここでもサーバー側のパスに行きました。



このチャネルを介して機密情報が送信されることはないため、HTTPSトラフィックは通常のHTTPチャネルにまったくリダイレ​​クトできます。 このために、私は平凡なWebプロキシを使用しました。 このWebプロキシには、GETパラメーターとして遷移のアドレスを渡すことができるため、選択しました。



したがって、これらすべての操作の結果として、次の形式のリンクをRSSクライアントにフィードするだけで十分です。

www.webproxy.net/view?q=https://script.google.com/macros/s/__/exec





twitterのRSSフィードの完全に機能するバージョンを取得します。



複数のユーザーを読みたい場合は、同じコンテンツの別のスクリプトを同じドキュメントに追加しますが、ユーザー名は異なります。



このメソッドは不必要に面倒に思えるかもしれませんが、クライアント側での変更を必要とせず、リボンを任意の順序でグループ化できます。 さらに、Twitterアカウントは不要です。



ご清聴ありがとうございました!



All Articles