javascriptで特定ユーザーの最新ツイートを 認証なしで取得する

現在 twitter APIはoauh認証が必須となり、APIの認証キーの取得にはデベロッパーの登録が必須となっている。
....が簡単に最新のツイートを取ってきたいので、javascriptスクレイピングしてくることにする。

javascriptスクレイピングする場合、AJAX XMLHttpRequest()または、JQueryを使って$.ajaxで非同期にhttpを取得し
JQueryでDOMをパースする流れになる。

但し、JQueryはbodyタグやheadタグなどが入っていたり、htmlが壊れているパースができないので、
パースする前に取得したデータを加工しておく必要がある。

bodyタグより前を削除 ※twitterのhtml構造は壊れていての閉じタグはなくで終わっているのでこれで問題ない。

data.slice(data.search('<body'))

svgのソースのurl指定が絶対指定になっている影響でjqueryでのパース時にエラーが発生するのでjqueryに読み込ませる前に正規表現で除去する。

この正規表現は簡易なので、のように属性値に『>』が入っている場合には対応できないが、今回はtwitter限定なのでよしとする。

.replace(/<svg.*?>.*?<\/svg>/g,'')

正規表現で、特定htmlタグを除去する方法は突き詰めるとトコトンめんどくさい....。
他にも入れ子になった場合とかも考慮する必要がある...。

$(function(){
  var xhr = new XMLHttpRequest();
  xhr.open("GET", "https://mobile.twitter.com/<ユーザー>?lang=ja");
  xhr.onload = function(){
    var data = this.response;
    var body = '<div>'+data.slice(data.search('<body')).replace(/<svg.*?>.*?<\/svg>/g,'')+'</div>';
    console.log($(body).find('div.Timeline-item div.Tweet-body div.Tweet-text').html());
  };
  xhr.send(null);
});

尚、クロスドメインになるため、chrome拡張ではmanifest.jsonパーミッションの設定が必要になる。
つまりは、普通のブラウザのjabascripでtはクロスドメインでのアクセスはできないので、この記事は役に立ちません.....。

  "permissions": [
    "https://twitter.com/",
    "https://mobile.twitter.com/"
  ],