Теперь я знаю, , как загружать столбцы таблицу с внешней веб-страницы.
Теперь я хочу расширить это и:
- Получить табличные данные с нескольких страниц (рейтинги по позиции игрока).
- Объедините его в одну главную таблицу.
http://football.fantasysports.yahoo.com/f1/326198/pointsagainst?pos=QB, который в данный момент извлекает скрипт. Столбцы - это название команды и рейтинг команды для различных должностей.
Я хочу, чтобы он повторялся по другим позициям (например, WR, RB, TE). Это делается путем простого изменения двух последних букв URL-адреса на соответствующее значение. Затем я хочу, чтобы все эти данные были в одном массиве, где первый столбец — это название команды, второй столбец — рейтинг # для позиции QB, третий столбец — рейтинг # для позиции WR и так далее.
Мой план состоял в том, чтобы поместить GM_xmlhttpRequest
в цикл for
, который выполняет итерацию по различным названиям позиций.
Мой код может отображать отдельные таблицы для позиций, но по какой-то причине они расположены не по порядку.
Еще одна проблема, с которой я столкнулся, — область видимости переменных. В настоящее время 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);
}