外部 Web ページからテーブルの列をロードする方法がわかりました。
今、私はそれを拡張したいと思います:
- 複数のページから表形式のデータを取得します (プレーヤーの位置によるランキング)。
- 1 つのマスター テーブルにマージします。
これは、スクリプトが現在取得している URL (http:...fantasysports.yahoo.com...pos=QB)です。列は、チーム名とさまざまなポジションのチームのランクです。
他の位置 (つまり、WR、RB、TE) を反復処理したいと考えています。これは、URL の最後の 2 文字をそれぞれの値に変更するだけで実行できます。次に、このすべてのデータを単一の配列に入れたいと考えています。最初の列はチーム名、2 番目の列は QB ポジションのランキング #、3 番目の列は WR ポジションのランキング # などです。
GM_xmlhttpRequest
私の計画は、さまざまな位置名を反復するfor
ループに入れることでした。
私のコードでは、位置ごとに個別のテーブルを表示できますが、何らかの理由で順序が正しくありません。
私が遭遇したもう 1 つの問題は、変数のスコープです。現在newStatTable
、関数内で定義されていparseResponse
ますが、関数外からアクセスできません。var
から削除しvar newStatTable
てグローバルにしようとしましたが、うまくいきませんでした。
これは、私が探している出力配列のサンプルです (注: これらのランクをランダムに選択しただけです)。
TeamName QB WR TE and so on...
--- -- -- --
Jacksonville Jaguars 1 6 28
Sanfrancisco 49ers 4 2 32
Seattle Seahawks 31 5 10
これが私の試みです。
// ==UserScript==
// @name _Grab stuff of a *static*, third-party web site.
// @include http://football.fantasysports.yahoo.com/*
// @include https://football.fantasysports.yahoo.com/*
// @require http://ajax.googleapis.com/ajax/libs/jquery/2.1.0/jquery.min.js
// @grant GM_xmlhttpRequest
// ==/UserScript==
pos = ["QB", "WR", "RB", "TE", "K", "DEF"];
for (x in pos) {
GM_xmlhttpRequest ( {
method: "GET",
url: "http://football.fantasysports.yahoo.com/f1/326198/pointsagainst?pos=" + pos[x],
onload: parseResponse,
onerror: function (e) { console.error ('**** error ', e); },
onabort: function (e) { console.error ('**** abort ', e); },
ontimeout: function (e) { console.error ('**** timeout ', e); }
} );
}
function parseResponse (response) {
var parser = new DOMParser ();
var ajaxDoc = parser.parseFromString (response.responseText, "text/html");
var statRows = ajaxDoc.querySelectorAll ("#statTable0 > tbody > tr");
var newStatTable = $(statRows).map ( function () {
var tblRow = $(this);
var teamRank = parseInt (tblRow.find (".rank-indicator").text().trim(), 10);
var teamName = tblRow.find ("td:eq(1)").text().trim().split(" vs")[0];
return [ [teamName, teamRank] ]; //Return Teamname, Rank #
} ).get ();
console.log (newStatTable);
}