簡體   English   中英

Google 腳本 - 從網站論壇解析 HTML - 並將數據寫入工作表

[英]Google script - parse HTML from Website Forum - and Write Data to Sheet

我從論壇 url 獲取 HTML,並從他們的個人資料頁面解析用戶的帖子數。 我不知道如何將解析后的數字寫入 Google 電子表格。

它應該在 B 列中逐個帳戶,直到最后一行,並使用計數更新 A 列。

該腳本沒有給我任何錯誤,但它沒有將檢索到的值設置到電子表格中。

    function msg(message){
  Browser.msgBox(message);
}

function onOpen() {
  var ui = SpreadsheetApp.getUi();
  ui.createMenu("Update")
    .addItem('Update Table', 'updatePosts')
    .addToUi();
}

function getPostCount(profileUrl){
  var html = UrlFetchApp.fetch(profileUrl).getContentText();
  var sliced = html.slice(0,html.search('Posts Per Day'));  
  sliced = sliced.slice(sliced.search('<dt>Total Posts</dt>'),sliced.length);
  postCount = sliced.slice(sliced.search("<dd> ")+"<dd> ".length,sliced.search("</dd>"));

  return postCount;
}

function updatePosts(){

  if(arguments[0]===false){
    showAlert = false;
  } else {
    showAlert=true;
  }

  var spreadSheet = SpreadsheetApp.getActiveSpreadsheet();
  var accountSheet = spreadSheet.getSheetByName("account-stats");
  var statsLastCol = statsSheet.getLastColumn();
  var accountCount = accountSheet.getLastRow();
  var newValue = 0;
  var oldValue = 0;
  var totalNewPosts = 0;
  for (var i=2; i<=accountCount; i++){ 
    newValue = parseInt(getPostCount(accountSheet.getRange(i, 9).getValue())); 
    oldValue = parseInt(accountSheet.getRange(i, 7).getValue());
    totalNewPosts = totalNewPosts + newValue - oldValue;
    accountSheet.getRange(i, 7).setValue(newValue);    
    statsSheet.getRange(i,statsLastCol).setValue(newValue-todaysValue); 

  }
  if(showAlert==false){
    return 0;
  }
  msg(totalNewPosts+" new post found!");  
}


function valinar(needle, haystack){
  haystack = haystack[0]; 
  for (var i in haystack){

    if(haystack[i]==needle){
      return true;
    } 
  }


  return false;
}

這是我第一次做這樣的事情,並從其他站點的一個例子中工作。

我還有一個問題。 在函數getPostCount我發送函數profileurl 我在哪里聲明?

以下是從電子表格中獲取 URL 的方法:

function getPostCount(profileUrl){
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var thisSheet = ss.getSheetByName("List1");

  var getNumberOfRows = thisSheet.getLastRow();
  var urlProfile = "";
  var sliced = "";
  var A_Column = "";
  var arrayIndex = 0;

  var rngA2Bx = thisSheet.getRange(2, 2, getNumberOfRows, 1).getValues();

  for (var i = 2; i < getNumberOfRows + 1; i++) { //Start getting urls from row 2
    //Logger.log('count i: ' + i);

    arrayIndex = i-2;
    urlProfile = rngA2Bx[arrayIndex][0];

    //Logger.log('urlProfile: ' + urlProfile);

    var html = UrlFetchApp.fetch(urlProfile).getContentText();
    sliced = html.slice(0,html.search('Posts Per Day'));

    var postCount = sliced.slice(sliced.search("<dd> ")+"<dd> ".length,sliced.search("</dd>"));
    sliced = sliced.slice(sliced.search('<dt>Total Posts</dt>'),sliced.length);
    postCount = sliced.slice(sliced.search("<dd> ")+"<dd> ".length,sliced.search("</dd>"));

    Logger.log('postCount: ' + postCount);

    A_Column = thisSheet.getRange(i, 1);
    A_Column.setValue(postCount);
  };
}

你在你的變量之一前面缺少var

postCount = sliced.slice(sliced.search("<dd> ")+"<dd> ".length,sliced.search("</dd>"));

那行不通。 需要把var放在前面。 var postCount = ....

在這個函數中:

function updatePosts(){

  if(arguments[0]===false){
    showAlert = false;
  } else {
    showAlert=true;
  }

在您的代碼中的任何地方都沒有數組命名arguments arguments在哪里定義以及它如何將任何值放入其中?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM