Napisałem klasę sprawdzającą notowania poszczególnych fraz na podstawie ilości ich wystąpień w indexie wyszukiwarki google. Niestety nie wiem dlaczego za każdym razem, gdy wyślę niepuste zapytanie google odpowiada HTTP 403 [glowa]
Nie wiem dlaczego :/
http://www.google.pl/search?hl=en&q=sebo&btnG=Search&lr=lang_pl
Connecting... 1
java.io.IOException: Server returned HTTP response code: 403 for URL: http://www.google.pl/search?hl=en&q=sebo&btnG=Search&lr=lang_pl
at sun.net.www.protocol.http.HttpURLConnection.getInputStream(Unknown Source)
at java.net.URL.openStream(Unknown Source)
at sebo.wordPopularity.GooglePopularityCounter.run(GooglePopularityCounter.java:90)
Wszystko działa gdy wysyłam takie samo zapytanie z pustym parametrem q=
http://www.google.pl/search?hl=en&q=&btnG=Search&lr=lang_pl
Connecting... 1
<html><head><meta http-e...</body></html>
/**
* GooglePopularityCounter.java
* ścieżka sprawdzającą notowania poszczególnych fraz
* na podstawie ilości ich wystąpień w indeksie wyszukiwarki
* Google.
*
* Copyright (C) [email protected] na warunkach GNU GPLv3.
* Copyright (C) [email protected] under the terms of GNU GPLv3.
*
* For full license text, see http://www.gnu.org/licenses/gpl-3.0-standalone.html.
*/
package sebo.wordPopularity;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLEncoder;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
/**
* @author Sebo http://sebo.office-on-the-net
* @version 2008-01-16 00:51:43
*/
public class GooglePopularityCounter extends Thread{
private static boolean log= false;//czy wyświetlać komunikaty o stanie na System.out||System.err
private final Object object;//Czego szukamy
private int popularity= -1;//Ilość znalezionych stron
private int retry= 5;//ilośc nieudanych prób łączenia do hosta przed awaryjnym zamknięciem
/**
* Testowe uruchomienie scieżki sprawdzające wyniki
* @autor Sebo
* @version 2008-01-16 04:21:09
* @param a Parametry uruchumieniowe
*/
public static void main(final String[] a){
log=true;
GooglePopularityCounter.start(a.length>0?a[0]:"");
}
/*
* (non-Javadoc)
*
* @see sebo.wordPopularity.PopularityCounter#start(java.lang.Object)
*/
public static GooglePopularityCounter start(final Object object){
final GooglePopularityCounter googlePopularityCounter= new GooglePopularityCounter(
object);
googlePopularityCounter.start();
return googlePopularityCounter;
}
private GooglePopularityCounter(final Object object){
this.object= object;
}
/*
* (non-Javadoc)
*
* @see sebo.wordPopularity.PopularityCounter#getPopularity()
*/
public int getPopularity(){
if(this.isAlive()) throw new IllegalThreadStateException("Still counting...");
return this.popularity;
}
/*
* (non-Javadoc)
*
* @see java.lang.Thread#run()
*/
@Override
public void run(){
HttpURLConnection.setFollowRedirects(true);
for(int i= 0; i<this.retry; i++)
try{
final String url= "http://www.google.pl/search?hl=en&q="
+URLEncoder.encode(this.object.toString(),"ISO-8859-1")
+"&btnG=Search&lr=lang_pl";// ?lr=lang_pl&hl=en&q="+this.object.toString());
if(GooglePopularityCounter.log) System.err.println(url+"\nConnecting... "+(i+1));
final BufferedReader bufferedReader= new BufferedReader(
new InputStreamReader((new URL(url)).openStream()));
try{
String content;// =.toString();
final Pattern pattern= Pattern.compile("of about <b>([0-9,]+)</b>");
while(null!=(content= bufferedReader.readLine())){
if(GooglePopularityCounter.log) System.out.println(content);
final Matcher matcher= pattern.matcher(content);
if(matcher.find()){
final StringBuffer stringBuffer= new StringBuffer(matcher.group(1));
for(int c= stringBuffer.length()-1; c>-1; c--)
if(stringBuffer.charAt(c)==',') stringBuffer.deleteCharAt(c);
this.popularity= Integer.valueOf(stringBuffer.toString());
if(GooglePopularityCounter.log) System.out.println("I've found ("
+this.object+": "+this.popularity+") - returnning :)");
return;
}
}
}finally{
if(GooglePopularityCounter.log) System.err
.println("Finally closing bufferedReader.close();");
bufferedReader.close();
}
}catch(final MalformedURLException exception){
if(GooglePopularityCounter.log) exception.printStackTrace();
}catch(final IOException exception){
if(GooglePopularityCounter.log) exception.printStackTrace();
}
}
}
Jakieś pomysły?? Co mogę jeszcze spróbować [???]