的數據你正在尋找因爲對於自動提取並不是非常好的,但我們可以使用它。從this answer的getElementByVal()
功能可重構製造getElementsByVal()
,這將返回所有匹配的文檔元素的數組,給我們事情做進一步的搜索。
/**
* Traverse the given XmlElement, and return an array of matches.
* Note: 'class' is stripped during parsing and cannot be used for
* searching, I don't know why.
* <pre>
* Example: getElementsByVal(body, 'input', 'value', 'Go'); will find
*
* <input type="submit" name="btn" value="Go" id="btn" class="submit buttonGradient" />
* </pre>
*
* @param {XmlElement} element XML document element to start search at.
* @param {String} id HTML <div> id to find.
*
* @return {[XmlElements]} All matching elements (in doc order).
*/
function getElementsByVal(element, elementType, attr, val) {
var results = [];
// If the current element matches, remember it.
if (element[attr]
&& element[attr] == val
&& element.getName().getLocalName() == elementType) {
results.push(element);
}
// Check element's children
var elList = element.getElements();
var i = elList.length;
while (i--) {
// (Recursive) Check each child, in document order.
results = results.concat(getElementsByVal(elList[i], elementType, attr, val));
}
// Return summary of matches
return results;
}
要使用這個新的輔助功能,如果我們創建了一個函數getIndicators()
,該函數接受包含我們感興趣的時間點的String參數 - 例如,Mon. Jul 29, 2013 07:40:00
?匹配的文本將在元素中找到,該元素得到shape="rect"
,我們將在名爲onmousemove
的屬性中找到它。下面是我們的函數:
function getIndicators(timeString) {
var txt = UrlFetchApp.fetch("http://www.barchart.com/chart.php?sym=DXU13&t=BAR&size=M&v=2&g=1&p=I:5&d=L&qb=1&style=technical&template=").getContentText();
var doc = Xml.parse(txt,true);
var body = doc.html.body;
var indicators = "not found";
// Look for elements matching: < area shape="rect" ... >
var chartPoints = getElementsByVal(body, 'area', 'shape', 'rect');
// Search for the chartPoint with tooltip containing the time we care about
for (var i=0; i<chartPoints.length; i++) {
if (chartPoints[i].onmousemove.indexOf(timeString) > -1) {
// found our match
indicators = chartPoints[i].onmousemove;
}
}
return indicators
}
既然這樣,它會返回一個分配給onmousemove
整個文本值;智能解析的練習留給你。
這是一個測試功能,以幫助:
function test_getIndicators() {
Logger.log(getIndicators("Mon. Jul 29, 2013 07:40:00"));
}
運行時,這裏的日誌(今天,反正...):
[13-07-29 16:47:47:266 EDT] showOHLCTooltip(event, 'B', '[Mon. Jul 29, 2013 07:40:00]', 'DXU13', '81.8050000', '81.8300000', '81.8000000', '81.8200000')
Mogsdad,太感謝你了您的詳細和翔實的答案。這正是我一直在尋找的東西(而且我沒有在我的電腦前經過無數個小時後自己生產)。它完美的工作!我非常感謝您花時間和精力來幫助我,謝謝stackoverflow.com擁有這樣一個偉大的網站 - 它真的幫了我很多時間,當尋找具體的編碼問題的答案時。 – user2628114