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

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

新規登録して質問してみよう
ただいま回答率
85.48%
Swift

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

Q&A

解決済

1回答

308閲覧

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

clo.momo

総合スコア27

Swift

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

0グッド

0クリップ

投稿2018/05/23 05:17

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

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

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

swift

1 2var beforeText = 太郎 3var changeCount = 0 4 5//テキスト範囲が変化するまでループ 6for changeCount < 1 { 7 8 //選択範囲のテキストを取得してafterTextに代入 9 var afterText = 次郎 10 11 //テキストが変化したらアクションを実行 12 if beforeText != afterText { 13 func 太郎じゃない() 14 changeCount += 1 15 } 16 17} 18 19

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

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

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

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

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

guest

回答1

0

ベストアンサー

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

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

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

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

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

投稿2018/05/23 05:44

mather

総合スコア6753

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

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

clo.momo

2018/05/23 06:16 編集

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); // 選択範囲を表示
mather

2018/05/23 06:41

「Frames are not supported at the moment.」 「フレームに対応していない」と書いてあります。これは<frame>タグのことです。フレームは一つのページの中に別のページを追加で呼び出す方法ですので、一つのページを呼び出す際に実はページアクセスが複数回発生しています。 「プログラムがサイトにアクセスするのは最初の1回だけで、サイトの値が更新されたら即座に取得、といったように。」 HTTPでデータ取得するというアクションを起こさないと勝手にデータは降ってきません。まずはHTTPの仕組みを調べてみてはいかがでしょうか? JavaScriptに関しては、そもそもブラウザ上で動くものですし、ページの動きそのものをコントロールできる言語なので「リスナー」などの仕組みでページの動作に反応しています。 もし「テキストがランダムに変化する」のがJavaScriptの動きによるものなら、HTMLやJSのリソースをを取得した後にSwiftでJavaScriptを実行する必要がありますが、これは現状不可能だと思います。 もし可能なら、対象のサイトを直接提示したほうが適切な回答が得られると思います。
clo.momo

2018/05/23 06:48

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問