- ベストアンサー
グーグルに登録されているページをチェックする方法
- エクセルでURLがグーグルに登録されているかチェックする方法について質問させていただきました。
- 以前利用させていただいたコードがうまく動作しなかったため、再度質問させていただきました。
- 手動で試すとグーグルに登録されているにも関わらず、判定結果が異なる場合があり、その原因が分からないため助けを求めています。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
失礼しました。原因は、すぐに分かりましたが、気になっていた、URL エンコードについては、再び調べてみました。 エラーの原因 約○○件 と出る部分で、直接の原因は、「約」という文字が邪魔になっているのでした。 また、正しい数字が出ていませんでしたので、それも修正しました。 以下は、そのPrivate ~ End .... というひとまとまりを、全部上書きしてください。 これで様子をみてください。 Private Sub ContentsCheck(httpLog As String, rng As Range) 'rev:101226 Dim i As Long, j As Long Dim buf As Variant Const STXT As String = "検索オプション</a></div><div><div id=resultStats>" i = InStr(1, httpLog, STXT, 1) If i > 0 Then buf = Mid(httpLog, i + Len(STXT), 50) j = InStr(1, buf, "件<nobr>", 1) buf = Mid(buf, 1, j) buf = Replace(buf, "約", "") buf = Replace(buf, "件", "") End If If CLng(Val(buf)) > 0 Then rng.Offset(, 1).Value = "○" rng.Offset(, 2).Value = buf Else rng.Offset(, 1).Value = "×" End If End Sub URLencode 関数は、Google URLに使用する記号を調べ、ひと通り変換するように補完しましたが、Google エンコードは、GoogleBot に依存しているので、違う反応を示すこともあるようです。以下のエンコード関数は、Google専用です。これは、日本語モードに限定します。 '// '注:TextCompare モードをやめましたので、記号の全角半角の区別するようにしました。 Private Function UrlEncode(ByVal sText As String) As String 'For Google encode only /rev101226 Dim buf As String Dim ar As Variant Dim c As Variant If Len(sText) = 0 Then Exit Function sText = Trim(sText) With CreateObject("ScriptControl") .Language = "JScript" buf = .CodeObject.encodeURI(sText) ar = Array(":", ";", "/", "=", "?", "!", "#", "$", "&", "'", "(", ")", "+", ",") For Each c In ar buf = Replace(buf, c, "%" & Hex(AscW(c))) Next UrlEncode = buf End With End Function なお、Googleの内部ソースが変更になった場合は、この限りではありません。その場合は、ソースを取って、数字の出る部分を探してください。 今後の変更用の注意点 現在の検索の先頭部分:"検索オプション</a></div><div><div id=resultStats>" 本来は、今後のために、「件」という文字を先頭から探して、遡る方法もありますが、コードとして読みにくくなるので辞めました。 なお、2列目の表示には、○以外は、×が出る場合と、「アクセスエラー」と、「?」 の三種類があります。「?」は、プログラムエラーが発生している意味です。ただ、×の中には、Google側のGooglebot エラーもあるようですが、その検出はしておりません。 コードを変えたことで、少し反応が遅くなったはずですが、これで様子をみてください。
その他の回答 (2)
- xls88
- ベストアンサー率56% (669/1189)
失礼します。 気がついた処を書いてみます。 ContentsCheck の buf = Mid(httpLog, i + Len(STXT), 50) j = InStr(1, buf, "件<nobr>", 1) buf = Mid(buf, 1, j) で得られるbufの値ですが 1)約_2,450_件(_は半角スペースの意) 2)約_30_件 3)1_件 といったような種類があります。 そのままでは 次のIf文のCLng(Val(buf))で 1)2)のような場合は0が返されるので×になります。 3)のような場合は1が返されるので○になります。 例えば buf = Replace(Mid(buf, 1, j), "約 ", "") のようにして余分な文字列を消去してみてください。 因みに buf = "2,450" の場合 CLng(Val(buf)) では2が返されるようです。 ≪参考≫ Val関数 http://officetanaka.net/excel/vba/function/Val.htm
お礼
回答ありがとうございます。 参考にさせて頂きます。
- Wendy02
- ベストアンサー率57% (3570/6232)
前回、ちょっと触れていた内容なのですが、 >URLEncode関数は、詳しい検討はなされていません。 Private Function UrlEncode(ByVal sText As String) As String (UTF-8の変換関数)には、不安が残っています。前回は、// : の二つしか変換されなかったはずです。つまり、URLで使用する記号には、? & などがありますが、私が検査したのは、oshietegoo.jp だけですから、単純なURLです。 違う結果になった所で、直接、Googleに入力した場合と、関数で変換した場合と、そのURLの比較していただけませんか?昔、Yahooで同じようなものは作った覚えはあるのですが、今のところ記録が残っていません。こちらで、そういう現象を探すということも不可能ではありませんが、出来れば、ご指摘していただいたほうが早いです。他の部分では、思い当たる部分がないとは言えませんが、修正したはずなのです。ただし、同じ(×)が返っても、必ずしも同じ意味でないこともあります。
補足
Wendy02さん回答ありがとうございました。 私には関数とかは良くわからないので具体的に書きます。 例えば以下のURLなのですが、グーグルで直接検索してみるとちゃんと検索されるのですが、Wendy02さんのプログラムの判定では×になってしまいます。 http://daily.xsrv.jp/takkyuu/ http://daily.xsrv.jp/takkyuu/tishiki/0001.html http://health-care119.com/fuminsyou/ 他にもいろいろなURLがあるのですが、結構このような現象があるので、今回また質問させていただきました。
お礼
Wendy02様 回答ありがとうございました。 本当に感謝します。 とりあえず、解決いたしました。 今後は、検索エンジンの変更がないのを祈るばかりですが、また、分からないことがあったら質問いたします。 今回はありがとうございました。