質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

89.56%

【GAS】UserAgentを変更してfetchする方法

解決済

回答 1

投稿

  • 評価
  • クリップ 1
  • VIEW 466

w_k31

score 6

起きている問題

正しい値を引っ張ってこなくなりました。
自分の中で調べてみた感じだとUserAgentを変更しないといけないという結論に至りました。

▼使用してたコード
"F7:F110"にはfetchしたいURLを予め置いてます。

function test() {
  var spreadsheetObj = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = spreadsheetObj.getSheetByName("シート1");
  var LOGIN_URLS = sheet.getRange("F7:F110").getValues();

  var spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
  var sheet2 = spreadsheet.getSheetByName("シート2");

  for (var i = 0; i < LOGIN_URLS.length; i++){
    var lastrow = sheet2.getLastRow();
    var responses = UrlFetchApp.fetch(LOGIN_URLS[i]);
    var data = responses.getContentText();
    var csv = Utilities.parseCsv(data);
    sheet2.getRange(lastrow+1, 1, csv.length, csv[0].length).setValues(csv);

}
}


▼エラーで返ってくる

<html dir="ltr"><head><style>
html {
    font-family: "Helvetica Neue"
}

body {
    font-size: 12px;
    margin: 0;
    padding: 0;
    height: 100%;
}

a {
    text-decoration: none;
    color: inherit;
    cursor: pointer;
}

h1 {
    margin-left: 30px;
}

.nav {
    width: 100%;
    border-bottom: 1px solid #ccc;
    border-collapse: collapse;
    font-size: 13.33px;
}

.nav td {
    padding: 0;
}

.nav .navText {
    color: #00c;
    display: inline-block;
    padding: 9px 12px;
}

.nav .navText .selected {
    color: #000;
    font-weight: bold;
    text-decoration: none;
}

.body {
    background: #eee;
    color: #000;
    font-size: 13px;
    font-weight: bold;
    margin: 40px 100px;
    padding: 30px;
}

.body a {
    color: #00c;
    text-decoration: underline;
}

.footer {
    color: gray;
    margin: 100px 0 0 0;
    padding: 10px;
    width: 98%;
    bottom: 0;
}

.footer a {
    color: #77c;
}

.footer .right {
    float: right;
}
</style></head><body><table class="nav"><tbody><tr><td><div><span class="navText"><a href="https://www.indeed.com">Find Jobs</a></span><span class="navText"><a href="https://www.indeed.com/resumes">Find Resumes</a></span><span class="navText"><a href="https://ads.indeed.com/job/ads">Employers</a></span><span class="navText"><a href="/" class="selected">Analytics</a></span></div></td></tr></tbody></table><h1>Indeed Analytics (beta)</h1><div class="body"><p>It seems like you’re using an older version of your browser. For the best experience
function unsupportedAccessCookie() {
    var date = new Date();
    date.setTime(date.getTime() + (7 * 24 * 60 * 60 * 1000));
    document.cookie = "unsupportedAccess=1;expires=" + date.toUTCString() + ";path=/";
}
</script></body></html>


▼本来返ってくる値
該当企業の広告運用の当月データ

試したこと

UserAgentを変更してみました。

function test() {
  var spreadsheetObj = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = spreadsheetObj.getSheetByName("シート1");
  var LOGIN_URLS = sheet.getRange("F7:F110").getValues();
  var spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
  var sheet2 = spreadsheet.getSheetByName("シート2");
  var postheader = {
    "useragent":"Mozilla/5.0",
    "accept":"gzip"
  }
  var parameters = {
    "method":"get",
    "muteHttpExceptions": true,
    "headers": postheader
  }

  for (var i = 0; i < LOGIN_URLS.length; i++){
    var lastrow = sheet2.getLastRow();
    var responses = UrlFetchApp.fetch(LOGIN_URLS[i],parameters);
    var data = responses.getContentText();
    var csv = Utilities.parseCsv(data);
    sheet2.getRange(lastrow+1, 1, csv.length, csv[0].length).setValues(csv);

}
}


返ってくる結果は同じだったので、失敗でした。

知りたいこと

UserAgentを変更してfetchする方法になります。

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 1

checkベストアンサー

0

結論として、無理です。

参考:GASでクローラ作る際に使った機能

そのpostheaderでは単に"useragent"というヘッダがつくだけで、"User-Agent"は"Mozilla/5.0 (compatible; Google-Apps-Script)"のままでした。
またコードを変更して、

  var postheader = {
    "User-Agent":"Mozilla/5.0",
    "accept":"gzip"
  }


としても、"User-Agent": "Mozilla/5.0 (compatible; Google-Apps-Script)"で送信されました。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2019/11/01 12:04

    >>papinianus
    そうなんですね・・。
    一つずつポチポチ押すと時間が掛かるので、スプレッドシート内のマクロか、代案を模索しないといけないってことですね。ありがとうございます!

    キャンセル

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 89.56%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる