2016-07-30 10 views
1

使用して、Google Appsスクリプト内のテーブルの抽出:私は、次のコードを試してみました NSE私は次のリンクから値をインポートするUrlFetchApp

function extract() { 
    var html = UrlFetchApp.fetch('nseindia.com/live_market/dynaContent/live_watch/option_chain/optionKeys.jsp?symbol=NIFTY').getContentText(); 
    var doc = XmlService.parse(html); 
    var html = doc.getRootElement(); 
    var menu = getElementsByClassName(html, 'opttbldata')[0]; 
    var output = ''; 
    var linksInMenu = getElementsByTagName(menu, 'th'); 
    for(i in linksInMenu) output+= XmlService.getRawFormat().format(linksInMenu[i])+'<br>'; 
    return HtmlService.createHtmlOutput(output); 
    //Logger.log(menu); 
}; 


function getElementById(element, idToFind) { 
    var descendants = element.getDescendants(); 
    for(i in descendants) { 
    var elt = descendants[i].asElement(); 
    if(elt !=null) { 
     var id = elt.getAttribute('id'); 
     if(id !=null && id.getValue()== idToFind) return elt;  
    } 
    } 
}; 


function getElementsByClassName(element, classToFind) { 
    var data = []; 
    var descendants = element.getDescendants(); 
    descendants.push(element); 
    for(i in descendants) { 
    var elt = descendants[i].asElement(); 
    if(elt != null) { 
     var classes = elt.getAttribute('class'); 
     if(classes != null) { 
     classes = classes.getValue(); 
     if(classes == classToFind) data.push(elt); 
     else { 
      classes = classes.split(' '); 
      for(j in classes) { 
      if(classes[j] == classToFind) { 
       data.push(elt); 
       break; 
      } 
      } 
     } 
     } 
    } 
    } 
    return data; 
}; 


function getElementsByTagName(element, tagName) { 
    var data = []; 
    var descendants = element.getDescendants(); 
    for(i in descendants) { 
    var elt = descendants[i].asElement();  
    if(elt !=null && elt.getName()== tagName) data.push(elt);  
    } 
    return data; 
}; 

しかし、私は次のエラーを取得していますが:
は、コード403切り捨てサーバーの応答が返されました:アクセスが拒否されました

アクセスがあなたが「HTTP : / 2にアクセスする権限がありません

拒否されました(行2、ファイル "コード")

答えて

1

そのウェブサイトは、ブラウザではないものからのリクエストを拒否するようにユーザエージェントをチェックします。残念なことに、appsスクリプトではユーザーエージェントを変更することはできません。したがって、ユーザーエージェントを偽装することができるプロキシサーバーを使用しない限り、UrlFetchAppでそのサイトを読み込むことはできません。

+0

ありがとうございました!プロキシサーバーを使用して(可能であれば)達成するのを手伝ってもらえますか? – jwilson

+0

私は、アプリケーションスクリプトから使用できる既存のプロキシについて知らず、ユーザーエージェントヘッダーを偽装することを許可します。あなたまたはあなたの会社は自分のサーバーを所有していますか?その場合、プロキシとして動作させることができます。または、nseindiaと同じ情報を提供する別のWebサイトを見つけることもできます。もう1つの解決策は、nseindiaからデータを定期的に取得し、Googleドライブに送信する、PC上で実行されているアプリケーションをどこかに置くことです。 – SpiderPig

関連する問題