- 締切済み
ソケット通信
いつもお世話になっております。 私は最近、指定したウェブページのソースからリンク先のURLをリストとして書き出すツールを作ろうと思っているのですが、ウェブページのソースを所得する方法がわかりません。 某SNSで質問してみたところ、ソケット通信でhtmlデータを受信し、strstr()等で検索すれば良いとのことで調べては見たものの、通信関係は全くの無知なので理解し難い部分が多々ありました。 ですからここで質問させていただいたのですが、具体的にどのようなプログラムを書けばhtmlソースを受信することができるのでしょうか?
- みんなの回答 (3)
- 専門家の回答
みんなの回答
- aris-wiz
- ベストアンサー率38% (96/252)
単純にソケット通信といっても、 環境によって多少違いがあります。 お使いの環境を教えてください。
- Oh-Orange
- ベストアンサー率63% (854/1345)
★追記。 ・InternetReadFile() API関数を利用するには (1)『wininet.h』ヘッダをインクルードします。 (2)『WinInet.Lib』ライブラリをインポートします。 ※windows.h をインクルードしていれば wininet.h はインクルードしなくても良い。 ・以上。
- Oh-Orange
- ベストアンサー率63% (854/1345)
★アドバイス ・InternetReadFile() API関数で HTML ソースを取得できます。 この関数の使用例は次の過去質問を参考にして下さい。 http://oshiete1.goo.ne.jp/qa2630445.html→『InternetReadFileで大きいファイルが読み取れない』 ↑ ここに載せています。→回答者 No.2、No.3 を参考に。 ・なお、ファイルへ保存しなくてもメモリ内に HTML ソースを取得してメモリ上で URL アドレスを 抽出するようにしても良いでしょう。ただし、巨大な HTML ソース(1MB以上)の場合は別の方法で 分割取得します。このときは一時ファイルに保存して、そのファイルを処理するなどして下さい。 その他: ・前回の質問『URL抽出』→http://oshiete1.goo.ne.jp/qa3097203.html の補足アドバイスをします。 ・HTML ソースの中には改行が全くないタイプが存在するため、前回紹介した簡単なサンプルでは 一部、正常に URL を抽出できません。このタイプにも対応するには HTML ソースからタグを きちんと解読する必要があります。解読といっても文字列の処理ですので『<』~『>』文字の 間がタグの記述だと判断して『A』→『HREF=』文字列を StrStrI() 関数で見つけます。 その後に『=』文字に続く文字列が URL アドレスなのでダブルクォーテーションなどの文字まで を抽出します。 ・なお、StrStrI() 関数は C言語の strstr() と似た関数ですが、大文字と小文字を区別無く検索 できる便利な関数です。この API 関数を利用するには (1)#include <shlwapi.h> をインクルードする (2)shlwapi.lib をインポートする ↑ これで使用できます。 StrStrI() 関数については→http://nienie.com/~masapico/api_StrStrI.html を参考に。 ・まずは HTML ソースを一時ファイルに保存して、そのファイルから URL アドレスを抽出してみて下さい。 ・以上。