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

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

ただいまの
回答率

90.84%

  • Swift

    6509questions

    Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

サイト上で変化するテキストを取得するにはどうすればいい?

解決済

回答 1

投稿

  • 評価
  • クリップ 0
  • VIEW 94

clo.momo

score 14

テキストがランダムに変化するサイトがあります。
変化した瞬間にリアルタイムで取得するにはどうすればいいのでしょうか?

webスクレイピングは試してみたけどムリでした。

一応こんなロジックを考えています

var beforeText = 太郎
var changeCount = 0

//テキスト範囲が変化するまでループ
for changeCount < 1 {

  //選択範囲のテキストを取得してafterTextに代入
  var afterText = 次郎

  //テキストが変化したらアクションを実行
  if beforeText != afterText {
    func 太郎じゃない()
    changeCount += 1
  }

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

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

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

    クリップを取り消します

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

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

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

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

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

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

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

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

    質問の評価を下げる

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

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

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

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

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

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

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

    詳細な説明はこちら

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

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

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

回答 1

checkベストアンサー

+1

変化した瞬間にリアルタイムで取得する

HTTPでPULL型の通信をする以上はポーリングしないと無理ですし、ポーリングは基本的に相手のサイトに負荷をかけてしまいます。
Atomフィードなどがサイトの更新通知を受け取る方法として提供されていれば、そちらを利用するようにしましょう。

もしサイトの更新通知をWebhookなどで受け取れるサービスであれば、通知に基づきアクションをすることは可能でしょう。

webスクレイピングは試してみたけどムリでした。

無理、という部分はWebスクレイピングに何を期待して、具体的に何を失敗したんでしょうか?

投稿

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

  • 2018/05/23 15:11 編集

    webスクレイピングは、変化したテキストを取得しようとしたけど、エラーがでて取得できませんでした。

    Frames are not supported at the moment. Please open the frame in a new tab or window and try scraping again

    プログラミングを学びはじめたばかりで知識不足なのですが、変化したかチェックするたびにアクセスするのではなくて、単純に現在表示されているweb上からコピペする感じで取得は無理ですか?

    プログラムがサイトにアクセスするのは最初の1回だけで、サイトの値が更新されたら即座に取得、といったように。

    javascriptでは次のようなやり方でできるみたいなのですが、これもやはり通信しているのでしょうか?

    const getSelectArea = () => {
    const val = $('textarea').val(),
    elm = $('text').get(0),
    tmp = {
    before: val.slice(0, elm.selectionStart),
    after: val.slice(elm.selectionEnd),
    text: elm.value.slice(elm.selectionStart, elm.selectionEnd),
    };
    return tmp;
    };

    console.log(getSelectArea().text); // 選択範囲を表示

    キャンセル

  • 2018/05/23 15:41

    「Frames are not supported at the moment.」
    「フレームに対応していない」と書いてあります。これは<frame>タグのことです。フレームは一つのページの中に別のページを追加で呼び出す方法ですので、一つのページを呼び出す際に実はページアクセスが複数回発生しています。

    「プログラムがサイトにアクセスするのは最初の1回だけで、サイトの値が更新されたら即座に取得、といったように。」
    HTTPでデータ取得するというアクションを起こさないと勝手にデータは降ってきません。まずはHTTPの仕組みを調べてみてはいかがでしょうか?

    JavaScriptに関しては、そもそもブラウザ上で動くものですし、ページの動きそのものをコントロールできる言語なので「リスナー」などの仕組みでページの動作に反応しています。
    もし「テキストがランダムに変化する」のがJavaScriptの動きによるものなら、HTMLやJSのリソースをを取得した後にSwiftでJavaScriptを実行する必要がありますが、これは現状不可能だと思います。

    もし可能なら、対象のサイトを直接提示したほうが適切な回答が得られると思います。

    キャンセル

  • 2018/05/23 15:48

    不可能ですか。ありがとうございました。
    おかげで、できないことにこれ以上時間を費やさずに済みます。
    HTTPについても調べてみますね。

    キャンセル

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

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

関連した質問

  • 解決済

    Swift UIButton underLine

    UIButtonのテキスト2行です。下線を付ける方法を教えて下さい。

  • 解決済

    Swift クラス定義

    プログラミングに関してはほとんど無知識で、今年からC言語を大学で習い始めて、つい最近swiftの勉強を始めました。しかし、クラス定義がなんなのか、定義する利点はなんなのかいまいちよ

  • 解決済

    swift3.0 方位取得

    iphoneで方位取得を行いたく、様々なサイトでやり方を調べています。 しかし、どのサイトのサンプルコードや記述を用いてもswift3.0になった弊害なのかうまくビルドができ

  • 解決済

    Swift: UITextFieldの数値変換

    UITextField で受け取ったものを数値に変換するにはどうすればいいですか? Xcodeのバージョンは8です。

  • 解決済

    複数の変数宣言をループで

    質問させてください。 例えば var num1 = "テキスト1" var num2 = "テキスト2" var num3 = "テキスト3" などの変数をfor 

  • 解決済

    Dateを使って昨日の指定した何時何分までのデータを取得したい

    実現したいこと Data()を使って昨日の何時何分までのデータを指定して取得したいです。 例えば2017年3月5日の23時59分を指定して取得したい場合、 ソースコード

  • 解決済

    Swift 空の配列への要素の追加がうまくできません

    空の配列を作成し、そこにfor文での計算結果をプラスしたいのですが、エラーが出てしまいます。どうすればよいのでしょうか? var bright = [Double]() f

  • 解決済

    二次元配列の操作について

    let areas = [ ["code": "22", "name": "東京"], ["code": "23", "name": "神奈川"], ["code": "21", 

同じタグがついた質問を見る

  • Swift

    6509questions

    Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています