Seite 1 von 1

Yahoo Api Problem

Verfasst: 14.08.2008, 15:06
von Michael1967
Ich hätte mal eine schwere Frage. Ich komme da einfach nicht weiter.
Über die Yahoo Api +Script wird eine Abfrage mit folgendem Text abgesetzt.

Ich bin ein Beispieltext

Das funktioniert.

Suche ich aber nach –

Ich bin ein Beispieltext für

bekomme ich einen Error 400 -- Bad Request.

Im zweiten Beispiel befindet sich ein Sonderzeichen/Umlaute und dann funktioniert die Abfrage nicht mehr.

[code]$request='https://search.yahooapis.com/WebSearchS ... ber_of_res;[/code]

Hier in - urlencode($text_selection) steht der Text.

Was genau läuft hier falsch? Muss ich die Umlaute umwandeln damit ich über die Yahoo Api abfragen kann? Wen ja – wie genau funktioniert das?

Verfasst:
von

Verfasst: 15.08.2008, 01:43
von Burns
hallo,

umlaute musst du mit

utf8_encode(); für Yahoo codieren und Sonderzeichen würd ich ganz einfach rausfiltern. Für das Suchergebnis sind die bestimmt nicht wichtig.

$string = preg_replace("/[^a-zA-Z0-9 ä ö ü ß Ä Ö Ü ]/"," ",$string);

Verfasst: 15.08.2008, 09:15
von Michael1967
Wenn sich Umlaute in der Beschreibung befinden, dann kommt ein

Error 400 -- Bad Request

Der Link -

https://search.yahooapis.com/WebSearchS ... esults=100

Ich denke mal hier liegt der Hund begraben - +f%FCr+

Aber ich habe keine Ahnung wie das korrekt aussehen muss, damit es auch funktioniert.

Verfasst: 15.08.2008, 12:21
von Burns
ich hab's und bei mir funst es nun endlich

Code: Alles auswählen

    $array_1 = array&#40;"ä","ü","ö","Ä","Ü","Ö","ß","'","< ",">",'"',"§","€","²","³"&#41;;
    $array_2 = array&#40;"ä","ü","ö","Ä","Ü","Ö","ß","&apos;","<",">",""","&sect;","EUR","&sup2;","&sup3;"&#41;; 
    $string = str_replace&#40;$array_1,$array_2,$string&#41;;
kann erweitert werden falls ich Sonderzeichen vergessen habe

Argh, die Codeanzeige wandelt die Zeichen um so dass ich das hier nicht posten kann

ä = & # 228
ü = & # 252

weiss aber nicht wie sich diese codierung nennt, hoffe es hilft weiter

Verfasst: 15.08.2008, 13:27
von Michael1967
Und an welcher Stelle/Variable hast du das jetzt eingebaut?

Ich verstehe den Sinn deiner Funktion auch nicht. Wie soll damit eine Umwandlung stattfinden?

Verfasst: 15.08.2008, 15:06
von Burns

Code: Alles auswählen

$request='http&#58;//search.yahooapis.com/WebSearchService/V1/webSearch?appid='.$application_ID.'&query='.urlencode&#40;$text_selection&#41;.'&output=php&adult_ok=1&type=phrase&region='.$country.'&results='.$number_of_res;



das ist ja dein Code, du musst natürlich die Variable $text_selection nach umlauten durchsuchen lassen und umwandeln

ich kann hier den genauen Code nicht posten, das forum wandelt den Quelltext leider um , macht aus & # 228 gleich wieder ein ä
sende mir mal deine Email als PM und ich sende Dir den richtigen Code

Re: Yahoo Api Problem

Verfasst: 15.08.2008, 15:12
von Mork vom Ork
Michael1967 hat geschrieben:Im zweiten Beispiel befindet sich ein Sonderzeichen/Umlaute und dann funktioniert die Abfrage nicht mehr.
[…]
Was genau läuft hier falsch? Muss ich die Umlaute umwandeln, damit ich über die Yahoo-API abfragen kann?
Das steht in der Yahoo-Anleitung: „query | string (required) | The query to search for (UTF-8 encoded).“ Auf Deutsch: Die Texte müssen utf-8-kodiert sein (und anschließend auch noch URL-kodiert). Du benutzt augenscheinlich iso-8859-1, nicht utf-8.
Wen ja – wie genau funktioniert das?
Burns hat bereits geschrieben, dass du bei PHP dafür die Funktion utf8_encode() benutzen kannst. Ich persönlich würde eher iconv() empfehlen, da utf8_encode() auf den Zeichensatz iso-8859-1 beschränkt ist, im Web aber häufig (und unbewusst) dessen Erweiterung windows-1252 verwendet wird. Beide Zeichensätze gleichen sich weitestgehend, nennenswerte Ausnahme bildet das Eurozeichen, das in iso-8859-1 nicht vorhanden ist. Mit iconv() und windows-1252 als Eingangskodierung ist man auf der sicheren Seite (oder, noch besser, man stellt gleich auf utf-8 um).

Mit utf8_encode():

Code: Alles auswählen

$request='http&#58;//search.yahooapis.com/WebSearchService/V1/webSearch?appid='.$application_ID.'&query='.urlencode&#40;utf8_encode&#40;$text_selection&#41;&#41;.'&output=php&adult_ok=1&type=phrase&region='.$country.'&results='.$number_of_res;
Mit iconv() und windows-1252:

Code: Alles auswählen

$request='http&#58;//search.yahooapis.com/WebSearchService/V1/webSearch?appid='.$application_ID.'&query='.urlencode&#40;iconv&#40;"WINDOWS-1252", "UTF-8", $text_selection&#41;&#41;.'&output=php&adult_ok=1&type=phrase&region='.$country.'&results='.$number_of_res;

Verfasst: 15.08.2008, 16:57
von Burns
Ahhh, super
das funktioniert sehr gut und macht meine Umwandlung der Umlaute unnötig.

THX Mork, nano nano ;)

Verfasst: 15.08.2008, 18:57
von Michael1967
Das funktioniert bei mir auch nach dem Tauschen der Zeile nicht.

Muss ich da noch was beachten?

Verfasst: 15.08.2008, 22:05
von Mork vom Ork
Michael1967 hat geschrieben:Das funktioniert bei mir auch nach dem Tauschen der Zeile nicht.
Welchen Code hast du denn jetzt und welche Yahoo-URL wird aufgerufen bzw. liefert den Fehler?

Verfasst: 15.08.2008, 22:13
von Michael1967
Den zweiten Code habe ich eingebaut.

Ausgabe -

Code: Alles auswählen

http&#58;//search.yahooapis.com/WebSearchService/V1/webSearch?appid=YahooDemo&query=und+Internet+Marketing+Steigern+Sie+den+Wert+Ihrer+Webseite&output=php&adult_ok=1&type=phrase®ion=de&results=50http&#58;//search.yahooapis.com/WebSearchService/V1/webSearch?appid=YahooDemo&query=Marketing+Steigern+Sie+den+Wert+Ihrer+Webseite+mit+einem&output=php&adult_ok=1&type=phrase®ion=de&results=50http&#58;//search.yahooapis.com/WebSearchService/V1/webSearch?appid=YahooDemo&query=Sie+den+Wert+Ihrer+Webseite+mit+einem+Eintr%C3%A4g+in&output=php&adult_ok=1&type=phrase®ion=de&results=50
Da ist ein "ä" im Text *gg*


Nehme ich das "ä" raus funktioniert alles und es kommt -

Code: Alles auswählen

http&#58;//search.yahooapis.com/WebSearchService/V1/webSearch?appid=YahooDemo&query=Informationsportal+und+Internet+Marketing+Steigern+Sie+den+Wert+Ihrer&output=php&adult_ok=1&type=phrase®ion=de&results=50http&#58;//search.yahooapis.com/WebSearchService/V1/webSearch?appid=YahooDemo&query=Internet+Marketing+Steigern+Sie+den+Wert+Ihrer+Webseite+mit&output=php&adult_ok=1&type=phrase®ion=de&results=50http&#58;//search.yahooapis.com/WebSearchService/V1/webSearch?appid=YahooDemo&query=Sie+den+Wert+Ihrer+Webseite+mit+einem+Eintrag+in&output=php&adult_ok=1&type=phrase®ion=de&results=50http&#58;//search.yahooapis.com/WebSearchService/V1/webSearch?appid=YahooDemo&query=Sie+den+Wert+Ihrer+Webseite+mit+einem+Eintrag+in&output=php&adult_ok=1&type=phrase®ion=de&results=50http&#58;//search.yahooapis.com/WebSearchService/V1/webSearch?appid=YahooDemo&query=Wert+Ihrer+Webseite+mit+einem+Eintrag+in+den+Webkatalog&output=php&adult_ok=1&type=phrase®ion=de&results=50

Verfasst: 15.08.2008, 22:35
von Mork vom Ork
Michael1967 hat geschrieben:

Code: Alles auswählen

http&#58;//search.yahooapis.com/WebSearchService/V1/webSearch?appid=YahooDemo&query=und+Internet+Marketing+Steigern+Sie+den+Wert+Ihrer+Webseite&output=php&adult_ok=1&type=phrase®ion=de&results=50http&#58;//search.yahooapis.com/WebSearchService/V1/webSearch?appid=YahooDemo&query=Marketing+Steigern+Sie+den+Wert+Ihrer+Webseite+mit+einem&output=php&adult_ok=1&type=phrase®ion=de&results=50http&#58;//search.yahooapis.com/WebSearchService/V1/webSearch?appid=YahooDemo&query=Sie+den+Wert+Ihrer+Webseite+mit+einem+Eintr%C3%A4g+in&output=php&adult_ok=1&type=phrase®ion=de&results=50
Also das sind erstens mal drei aneinandergeklebte URLs, nicht eine, entsprechend beschwert Yahoo sich unter anderem über das mehrfache Auftreten des query-Parameters:

<Error>The following errors were detected:
<Message>multiple occurences: query</Message>
<Message>value out of range: results</Message>
<Message>multiple occurences: output</Message>
</Error>

Wenn ich aber die letzte der drei URLs, die mit den „Einträgen“, korrigiere (&type=phrase&region=de statt &type=phrase®ion=de) und im Browser abschicke, funktioniert's:

https://search.yahooapis.com/WebSearchS ... results=50

Verfasst: 15.08.2008, 22:45
von Michael1967
Das bedeutet jetzt?

Wie kommt das ®ion da rein? Und es darf nur mit einer Url abgefragt werden?

Verfasst: 16.08.2008, 09:10
von Mork vom Ork
Michael1967 hat geschrieben:Wie kommt das ®ion da rein?
Das weiß ich nicht, es steht in deinem Beitrag.
Und es darf nur mit einer Url abgefragt werden?
Äh, dass https://blabla?faselhttps://blabla?fuse ... abla?fisel kaum eine brauchbare URL ist, um Abfragen nach fasel, fusel und fisel zu starten, sollte offensichtlich sein.

Verfasst: 16.08.2008, 10:32
von Michael1967
Mork vom Ork hat geschrieben:
Michael1967 hat geschrieben:Wie kommt das ®ion da rein?
Das weiß ich nicht, es steht in deinem Beitrag.
Und es darf nur mit einer Url abgefragt werden?
Äh, dass https://blabla?faselhttps://blabla?fuse ... abla?fisel kaum eine brauchbare URL ist, um Abfragen nach fasel, fusel und fisel zu starten, sollte offensichtlich sein.
Vielen Dank für deine Hilfe! :D