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

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

新規登録して質問してみよう
ただいま回答率
85.50%
Google Apps Script

Google Apps ScriptはGoogleの製品と第三者のサービスでタスクを自動化するためのJavaScriptのクラウドのスクリプト言語です。

Q&A

2回答

1036閲覧

特定ページの表をスプレッドシートに取得したい

Kodanosuke

総合スコア42

Google Apps Script

Google Apps ScriptはGoogleの製品と第三者のサービスでタスクを自動化するためのJavaScriptのクラウドのスクリプト言語です。

0グッド

0クリップ

投稿2018/02/01 08:54

前提・実現したいこと

Googleスプレッドシートに、以下のページ内にあるにあるテキストをすべてを取り込みたいです。
http://www.ksbb.jp/schedule/2018/18-02-12.html
Google App Scriptでスプレッドシートないで処理するスクリプトを書いたことはありますが、外部のサイトから情報を取り込むことはしたことがありません。
どのようにしたら取り込めるかいちからご教授いただけませんでしょうか。
■■な機能を実装中に以下のエラーメッセージが発生しました。

発生している問題・エラーメッセージ

エラーはありませんが、先へ進めていません。

該当のソースコード

function myFunction() {
var urltemp = UrlFetchApp.fetch("http://www.ksbb.jp/schedule/2018/18-02-12.html");
var xml = urltemp.getContentText("shift-jis");
Logger.log(xml);
}

Google App Script

試したこと

impothtmlの関数を使って取り込んでみようと試みましたが、クエリ、指数がよく分からず挫折しました。

補足情報(FW/ツールのバージョンなど)

ここにより詳細な情報を記載してください。

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

jinshan

2018/02/21 00:46 編集

Webサイト表形式表示情報のスクレイピングをGASだけで実現した実例を持っているのですが、指定サイトは私の従業する環境では、アクセス禁止(娯楽関連)にひっかかって閲覧することができません。別の似たサイトを指定してくれれば、方法を提示できるかもしれません。
Kodanosuke

2018/02/27 03:47

ありがとうございます。別の似たサイトとはどのようなサイトを指しているのでしょうか。UTFで記述された他のサイトということでしょうか。よろしくお願いします。
guest

回答2

0

Xdomainあたりが易しいと思います。アカウントを作ったら、
管理パネルにログインし、
左サイドバーから「無料レンタルサーバー」をクリックし、次の画面で
PHP・MySQLサーバーの「管理バネルログイン」をクリックし、次の画面で
「FTPアカウント設定」をクリックし、次の画面で
WebFTPの下にあるログインボタンをクリックし、次の画面で
フォルダ/ファイル作成ボタンをクリックし、開いたダイアログボックスのなかで
utfconvert.phpなどと名前を入れて「ファイルを追加」をクリックして閉じて、
utfconvert.phpが出来ていたら鉛筆マークをクリックして編集画面に入り、

utfconvert.php

1<?php 2if (isset($_GET["url"])) { 3$url = $_GET["url"]; 4$ch = curl_init(); 5curl_setopt($ch, CURLOPT_URL, $url); 6curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 7$res = curl_exec($ch); 8$html = mb_convert_encoding($res, "UTF-8", "SJIS"); 9echo $html; 10curl_close($ch); 11} 12?>

とします(本当はfile_get_contents関数を使いたいがXdomainの場合、制限がかかっててこの関数はデフォルトでは使えない)。

そして最後にスプレッドシートに式を入れます。
=IMPORTHTML("http://アカウント名/utfconvert.php?url=http://www.ksbb.jp/schedule/2018/18-02-12.html","table",7)

アカウント名はFTPアカウント設定画面にある、xxxx.php.xdomain.jpです。

GASを使うなら、同じことですが

var url = "http://アカウント名/utfconvert.php?url=http://www.ksbb.jp/schedule/2018/18-02-12.html"; var response = UrlFetchApp.fetch(url, {muteHttpExceptions:true}); if (response.getResponseCode() != 200) { return; } var body = response.getContentText(); // 以下省略

のような感じになります。

投稿2018/02/05 10:36

true

総合スコア440

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

できない原因

今回の問題は対象のWebサイトの文字エンコーディングがShift-JISになっている点です。
UTF-8であればスプレッドシートのA1に以下1行を指定するだけで目標が達成できていました。

IMPORTHTMLは残念ながら現時点でUTF-8のみに対応しておりShift-JISに対応していません。

=IMPORTHTML("http://www.ksbb.jp/schedule/2018/18-02-12.html","table",7)

どうするか

GAS(Google App Script)を使いUrlFetchAppでHTMLを取得後Shift-JISとして読み取り、セルに値を入れるスクリプトを作る必要がありそうですが、私自身GASについて詳しく知らない上、Webサイトごとに個別に作る必要があり汎用的では無いので別の手法を紹介します。
(汎用的に作るとなるとそれなりのコード量になりそうです)

やり方

1 convert.php を作る

php

1<?php 2$url = $_GET['url']; 3$str = file_get_contents($url); 4$str = mb_convert_encoding($str, 'utf8', 'shift_jis'); 5echo $str;

2 1を任意のサーバにアップロードする
3 スプレッドシートのA1に以下を指定する

=IMPORTHTML("http://SERVER_ADDRESS/convert.php?url=http://www.ksbb.jp/schedule/2018/18-02-12.html","table",7)

4 実行結果
イメージ説明

投稿2018/02/01 11:01

編集2018/02/01 11:02
aglkjggg

総合スコア769

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Kodanosuke

2018/02/01 12:30

回答いただきありがとうございます。 大変申し訳ありませんが、当方phpに疎い状態です。 phpのコードをどうやって書いてどこにアップロードするのかも教えていただけませんでしょうか。 お手数をおかけしますがよろしくおねがいします。
aglkjggg

2018/02/01 12:35

完全に1からの説明になるので私には大きな負担となります。 すみませんがこれ以上の説明はできかねます。 他の回答者の回答をお待ち下さい。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問