Skript

Transcription

Skript
1 Gleich zu Anfang
• Was nicht behandelt wird:
– Google Interna
– Googles Page–Rank–Verfahren
– Technik von Suchmaschinen im Allgemeinen und Google im Besonderen
• Was wird behandelt?
– Google aus Anwendersicht
– Googles Syntax und das Google Web API
2 Einstellungen
• Sprache der Suchoberfläche
• bevorzugte Sprache(n) der Suchergebnisse (von A–Z)
• Anzahl der Suchergebnisse
3 Anatomy der Suchergebnise
A Erweiterte Suche
1
B Einstellungen
C Suchtipps
D Suchfeld
E Google Such-Schaltfläche
F Statistik-Balken
G Überschrift der Seite
H Text unter dem Titel
I Beschreibung
J Kategorien
K URL des Resultats
L Größe der Datei (nur html)
M Zusätzliches Ergebnis
N Im Cache
O Ähnliche Seiten
P Eingerücktes Ergebnis
• Was fehlt:
– News–Links erscheinen nur, wenn Suchbegriffe in aktuellen Nachrichten
vorkommen.
– Sponsored Links
– Übersetzung: Falls das Ergebnis nicht in dt. Sprache ist, führt der Link
[Diese Seite übersetzen] zu einer dt. Übersetzung (Wort–für–Wort–Übersetzung)
4 Boolsche Suche
• Google untersützt die boolschen Operatoren AND, OR, NOT
• Default ist AND
• Operator OR kann mit | abgekürzt werden
• Interessant ist NOT , geschrieben: −
• Klammern sind erlaubt
2
5 Syntax
• intitle nur zwischen ¡title¿-Tags suchen
• inurl nur URLs absuchen
• intext nur im Textkörper suchen
• inanchor Text in Ankern finden
• site Suche auf Site beschränken
• link Links auf Suchwort
• cache nur im Cache suchen
• filetype finde bestimmte Dateitypen
• related finde verwandte Seiten
• info Infos über eine bestimmte URL finden
• phonebook nur USA!
• daterange s.u.
6 inurl vs. site
• Unterschied zwischen URL und Site beachten
• site–Search ist nur geeignet für die Suche nach bestimmten Domains oder Domainsuffixen (www.hu-berlin.de, ib.hu-berlin.de, de), nicht aber für Unterverzeichnisse unterhalb der Domain.
• inurl löst das Problem der Suche nach Unterverzeichnissen und findet auch
Treffer in www.ib.hu-berlin.de/∼fern
• Beispiel: finde sämtliche Unterdomains von hu-berlin.de
– site:hu-berlin.de inurl:’’*.hu-berlin’’ -inurl:’’www.hu-berlin’’
3
7 Toolbars
• Google Toolbar (Internet Explorer) http://toolbar.google.de
• Mozilla Google Toolbar http://googlebar.mozdev.org
• Quick Search Toolbar http://notesbydave.com
• GAPIS (Google API Searching in an Application)
http://www.searchenginelab.com/common/products/gapis
8 Limits
• Bei normaler Suche
– 10 Suchwörter
– Suchwort site einmal
• WebAPI
– Bytelänge der Suchanfrage: 2048 Bytes
– 10 Wörter für die Suche
– Suchwort site einmal
– Max. Anzahl der Resultate/Abfrage: 10
9 Wildcards / 10-Wort-Limit überwinden
• häufige Wörter weglassen
• +/− Operatoren einsetzen
• Wildcards einsetzen: Google unterstützt nur fullword-wildcards, keine Trunkierung
10 Datumsuche mit daterange
10.1 Datumssuche
• Syntax: daterange:start date-end date
• Vorteile:
– Suche kann auf aktuelle Inhalte beschränkt werden;
4
– aktuelle Ereignisse, die hohe Trefferraten erzielen, können vermieden werden;
– Suchergebnisse über einen festgelegten Zeitraum können verglichen werden.
• Probleme:
–
–
–
–
Zeitraum der Indexierung, nicht der Erstellung wird verwendet;
Seiten werden, sobald sie sich ändern, von neuem indiziert;
Datumssuche wird offiziell nicht von Google unterstützt;
Eingabeformat als julianischen Datum.
10.2 Julianisches Datum – Julian Date
Julianisches Datum Die Anzahl der Tage, die seit dem 1. Januar 4713 v.Chr. vergangen sind. Ein julianisches Datum ist also einfach nur eine Zahl, die nicht weiter
in Monate, Tage und Jahre unterteilt wird. Was hier schwer für Menschen ist,
ist für Computer perfekt. Um nämlich ein Datum zu ändern, müssen sie nur eine bestimmte Anzahl von Tagen hinzuaddieren oder subtrahieren, ohne sich um
bestimmte Formate, Monatsnamen usw. zu kümmern.
Formel:
k = (m − 14)/12
l = j + k + 4800
jd = t − 32075 + 1461 ∗ l/4 + 367 ∗ ((m − 2 − 12 ∗ k)/12)
−3 ∗ ((l + 100)/100)/42452944 − 2453035
10.3 Anwendung von daterange
• 4. Februar 2004 = 2453040
• 1. Februar 2004 = 2453037
• Suchbeispiele
1. Aktuelles Ereignis ausklammern und Anzahl der Ergebnisse vergleichen
– Suche nach “Florian Gerster” im Zeitraum von 01. Nov. 2002 – 01.
Feb. 2003 und “Florian Gerster” im Zeitraum von 01. Nov. 2003 – 01.
Feb. 2004
– Erster Zeitraum "florian gerster" daterange:2452579-2452672
– Zweiter Zeitraum "florian gerster" daterange:2452944-2453035
– Im ersten Zeitraum erzielen wir ca. 250 und im zweiten Zeitraum fast
50.000 Ergebnisse.
5
11 Goolge auf der eingenen Seite
11.1 Einfachste Lösung
• Vier Zeilen html reichen aus:
<form method="get" action="http://www.google.de/search">
<input type="text" name="q" size=31 maxlength=255 value="">
<input type="submit" name="sa" value="Google Suche">
</form>
11.2 Etwas komfortabler
<!-- Google Suchmaske -->
<form method="get" action="http://www.google.de/search">
<input type="text" name="q" size=31 maxlength=255 value="">
<p />
Finde bestimmte Dateitypen:
<select name="as_filetype">
<option value="pdf">PDF</option>
<option value="ppt">Powerpoint</option>
<option value="doc">MS Word</option>
<option value="">Alle</option>
</select>
<p />
Suche auf Seiten der:
<select name="as_sitesearch">
<option value="hu-berlin.de">HU Berlin</option>
<option value="ib.hu-berlin.de">IB</option>
<option value="aa">Egal</option>
</select>
<p />
<input type="submit" name="sa" value="Google Suche">
</form>
<!-- Google Suchmaske -->
12 Web API
12.1 Worum geht es?
• Ursprünglich waren automatisierte Abfragen bei Google verboten! Wers trotzdem tat, wurde komplett ausgesperrt (IP–Adresse, auch ganze Bereiche).
6
• Im Frühjahr 2002 änderte Google diese restriktive Politik und veröffentlichte das
Google Web API.
• API steht für Application Programming Interface, eine Schnittstelle, um mit
eigenen Anwendungsprogrammen auf andere Anwendungen (Datenbanken, hier
der Google Index) zugreifen zu können.
• Zu finden ist das Web API unter http://www.google.com/apis
12.2 Wie funktioniert das Web API
• Das Web API bietet eigenen Anwendungen eine definierte Schnittstelle zum
Google Index.
• Wer das Web API benutzen möchte, muß sich zuerst bei Google registrieren
lassen.
• Registrierte Nutzer/Innen erhalten einen Schlüssel, ohne den keine Abfragen
möglich sind.
• Dieser Schlüssel muß in jeder automatisierten Abfrage enthalten sein.
• Eine Registrierung lohnt sich auch, wenn keine eigenen Programme entwickelt
werden sollen, da auch Anwendungen von Drittanbietern, die auf den Google
Index zugreifen, einen solchen Schlüssel verlangen.
• Die Abfrage ist im Moment auf 1000 Ergebnisse täglich beschränkt.
• Unbedingt die allgemeinen Geschäftsbedingungen durchlesen!
12.3 Web Services Description Language (WSDL)
• XML–Format, mit dem Webservices beschrieben werden können.
• Teil des Entwicklerpackets ist GoogleSearch.wsdl
• GoogleSearch.wsdl beschreibt, welche Dienste über das Web API zur Verfügung
stehen, die dazugehörigen Methodennamen und welche Argumente vom Programm übergeben werden können.
• GoogleSearch.wsdl muß in jedem Programm, das Google abfragen möchte,
enthalten sein.
7
12.3.1 Der Abfragecode im Programm
• Kern jeder Google–Anwendung ist der Abfragecode. Ohne diesen liefert Google
keine Ergebnisse.
• Wichtige Teile des Abfragecodes:
my $results = $google_search ->
doGoogleSearch(
key, query, start, maxResults,
filter, restrict, safeSearch,
lr, ie, oe
);
• Erläuterungen:
– start Offset: ab welchem Ergebnis soll begonnen werden (0 - 999);
– maxResults wieviele Ergebnisse (1 - 10);
– filter Ähnliche Ergebnisse herausfiltern (Inhalte, IP–Adressen) (true/false)
– restrict Suche auf bestimmte Sprache (lang de, lang en) oder Thema
(US Regierung, Linux, Mac, BSD) beschränken (unclesam, linux, mac,
bsd);
– safeSearch sollen Ergebnisse evtl. jungendgefährdende Inhalte enthalten
(true/false).
13 Beispiele
13.1 Beispiel 1: Ein einfaches Beispiel
#!/usr/bin/perl
# usage: perl googly.pl <query>
# Aus ’Google Hacks’
#
my $google_key=’<ENTER YOUR KEY HERE>’;
my $google_wsdl = "GoogleSearch.wsdl";
use SOAP::Lite;
my $query = shift @ARGV or die "Usage: perl googly.pl <query>\n";
my $google_search = SOAP::Lite->service("file:$google_wsdl");
# query google
my $results = $google_search ->
doGoogleSearch(
$google_key, $query, 0, 5,
8
"false", "", "false", "",
"utf8", "uft8");
# no results?
@{$results->{resultElements}} or exit;
# loop throught the results
foreach my $result (@{$results->{resultElements}}) {
print
join "\n",
$result->{title} || "no title",
$result->{URL},
$result->{snippet} || "no snippet", "\n";
}
13.2 Beispiel 2: Problem umgehen, daß nur 10 Ergebnisse geliefert
werden
#!/usr/bin/perl
# looply.pl: 10 Ergebnisse Beschränkung bei Google mit
#
einer Schleife ueberwinden
#
# Usage: perl looply.pl <Abfrage>
# Aus ’Google Hacks’
#
use strict;
use SOAP::Lite;
my $googlekey = ’<ENTER YOUR KEY HERE>’;
my $google_wsdl = "GoogleSearch.wsdl";
# wie oft soll die Schleife ausgefuehrt werden?
my $loops = 3;
my $offset = 0;
my $query = shift @ARGV or die "Usage: perl looply <abfrage>\n";
my $google_search = SOAP::Lite->service("file:$google_wsdl");
# Anzahl der Ergebnisse mitverfolgen
my $number = 0;
for (my $offset=0; $offset<=($loops-1)*10; $offset+=10) {
# Google abfragen
my $results = $google_search ->
doGoogleSearch(
$googlekey, $query, $offset, 10, "false",
9
"", "false", "", "utf8", "utf8");
# Testen, ob ueberhaupt noch Ergebnisse vorliegen, sonst abbrechen
last unless @{$results->{resultElements}};
# Ergebnisse ausgeben
foreach my $result (@{$results->{’resultElements’}}) {
# Was ausgegeben wird
print
join "\n",
++$number,
$result->{title} || "no title",
$result->{URL},
$result->{snippet} || "no snippet",
"\n";
}
}
13.3 Beispiel 3: Reihenfolge der Suchwörter kann relevant sein
#!/usr/bin/perl
# order_matters.cgi
# Queries Google for every possible permutation of up to 4 query keywords,
# returning result counts by permutation and top results across permutations.
# order_matters.cgi is called as a CGI with form input
# Aus ’Google Hacks’
#
# Your Google API developer’s key
my $google_key=’<ENTER YOUR KEY HERE>’;
# Location of the GoogleSearch WSDL file
my $google_wdsl = "GoogleSearch.wsdl";
use
use
use
use
strict;
SOAP::Lite;
CGI qw/:standard *table/;
Algorithm::Permute;
print
header( ),
start_html("Order Matters"),
h1("Order Matters"),
10
start_form(-method=>’GET’),
’Query: &nbsp; ’, textfield(-name=>’query’),
’ &nbsp; ’,
submit(-name=>’submit’, -value=>’Search’), br( ),
’<font size="-2" color="red">
Enter up to 4 query keywords or "quoted phrases"
</font>’,
end_form( ), p( );
if (param(’query’)) {
# Glean keywords
my @keywords = grep !/ˆ\s*$/,
split /([+-]?".+?")|\s+/, param(’query’);
scalar @keywords > 4 and
print(’<font color="red">Only 4 query keywords or phrases allowed.</font>’),
last;
my $google_search = SOAP::Lite->service("file:$google_wdsl");
print
start_table({-cellpadding=>’10’, -border=>’1’}),
Tr([th({-colspan=>’2’}, [’Result Counts by Permutation’ ])]),
Tr([th({-align=>’left’}, [’Query’, ’Count’])]);
my $results = {}; # keep track of what we’ve seen across queries
# Iterate over every possible permutation
my $p = new Algorithm::Permute( \@keywords );
while (my $query = join(’ ’, $p->next)) {
# Query Google
my $r = $google_search ->
doGoogleSearch(
$google_key,
$query,
0, 10, "false", "", "false", "", "latin1", "latin1"
);
print Tr([td({-align=>’left’},
[$query, $r->{’estimatedTotalResultsCount’}] )]);
@{$r->{’resultElements’}} or next;
# Assign a rank
11
my $rank = 10;
foreach (@{$r->{’resultElements’}}) {
$results->{$_->{URL}} = {
title => $_->{title},
snippet => $_->{snippet},
seen => ($results->{$_->{URL}}->{seen}) + $rank
};
$rank--;
}
}
print
end_table( ), p( ),
start_table({-cellpadding=>’10’, -border=>’1’}),
Tr([th({-colspan=>’2’}, [’Top Results across Permutations’ ])]),
Tr([th({-align=>’left’}, [’Score’, ’Result’])]);
foreach ( sort { $results->{$b}->{seen} <=>
$results->{$a}->{seen} } keys %$results ) {
print Tr(td([
$results->{$_}->{seen},
b($results->{$_}->{title}||’no title’) . br( ) .
a({href=>$_}, $_) . br( ) .
i($results->{$_}->{snippet}||’no snippet’)
]));
}
print end_table( ),
}
print end_html( );
14 Quellen
1. Tara Calishain, Rael Dornfest: Google Hacks ISBN 3-89721-362-1
2. http://www.google.com/apis
3. http://www.google.com/apis/reference.html
4. Pagerank Calculator: http://www.markhorrell.com/seo/pagerank.asp
5. GAPIS http://www.searchenginelab.com/common/products/gapis
12
6. Julianischer Kalender: http://en.wikipedia.org/wiki/Julian_date
7. Julianische Datum errechnen: http://aa.usno.navy.mil/data/docs/JulianDate.html
13