php-resource



Zurück   PHP-Scripte PHP-Tutorials PHP-Jobs und vieles mehr > Entwicklung > PHP Developer Forum
 

Login

 
eingeloggt bleiben
star Jetzt registrieren   star Passwort vergessen
 

 

 


PHP Developer Forum Hier habt ihr die Möglichkeit, eure Skriptprobleme mit anderen Anwendern zu diskutieren. Seid so fair und beantwortet auch Fragen von anderen Anwendern. Dieses Forum ist sowohl für ANFÄNGER als auch für PHP-Profis! Fragen zu Laravel, YII oder anderen PHP-Frameworks.

Antwort
 
LinkBack Themen-Optionen Thema bewerten
  #1 (permalink)  
Alt 18-09-2006, 19:24
Carsten Henkelmann
 Junior Member
Links : Onlinestatus : Carsten Henkelmann ist offline
Registriert seit: Mar 2002
Beiträge: 56
Carsten Henkelmann ist zur Zeit noch ein unbeschriebenes Blatt
Standard Brauche Hilfe bei regulären Audrücken

Hallo!

Wie die meisten Webmaster finanziere ich meine Seite zum Teil über das Amazon-Partnerprogramm. Bei Amazon gibt es aber mittlerweile mehrere verschiedene Link-Varianten und wenn jemand einen Link zu Amazon ins Forum postet, steht dabei natürlich nicht immer die Partner-ID bei.

Deswegen suche ich mit Hilfe durch reguläre Ausdrücke nach einer Routine, die aus allen mir bislang bekannten URL-Varianten den richtigen Partnerlink erstellt. Ich bin ja schon nahe dran, aber noch sind die Ausdrücke zu ungenau im Ersetzen. Ich poste einfach mal was ich habe:

PHP-Code:
<?php
$string 
= array();
$string[] = 'http://www.amazon.de/exec/obidos/ASIN/B000GIN50I';
$string[] = '<a href="http://www.amazon.de/exec/obidos/ASIN/B000GIN50I">'
          
'http://www.amazon.de/exec/obidos/ASIN/B000GIN50I</a> und weiterer Text';
$string[] = 'http://www.amazon.de/exec/obidos/ASIN/B000GIN50I/'
          
'ref=amb_link_33125065_1/302-5910331-8793668'
$string[] = '<a href="http://www.amazon.de/exec/obidos/ASIN/B000GIN50I/'
          
'ref=amb_link_33125065_1/302-5910331-8793668">'
          
'http://www.amazon.de/exec/obidos/ASIN/B000GIN50I/ref=amb_link_33125065_1/'
          
'302-5910331-8793668</a> und weiterer Text';
$string[] = 'http://www.amazon.de/gp/product/B000GYJUSI/ref=amb_link_macro_34504265/'
          
'302-5910331-8793668?ie=UTF8';
$string[] = '<a href="http://www.amazon.de/gp/product/B000GYJUSI/'
          
'ref=amb_link_macro_34504265/302-5910331-8793668?ie=UTF8">'
          
'http://www.amazon.de/gp/product/B000GYJUSI/ref=amb_link_macro_34504265/'
          
'302-5910331-8793668?ie=UTF8</a>';
$string[] = 'http://www.amazon.de/Vendetta-Steel-inkl-exklusiv-Amazon/dp/B000GQLQUG/'
          
'sr=1-2/qid=1157647058/ref=pd_bowtega_2/302-5910331-8793668?ie=UTF8&s=dvd';
$string[] = '<a href="http://www.amazon.de/Vendetta-Steel-inkl-exklusiv-Amazon/dp/B000GQLQUG/'
          
'sr=1-2/qid=1157647058/ref=pd_bowtega_2/302-5910331-8793668?ie=UTF8&s=dvd">'
          
'http://www.amazon.de/Vendetta-Steel-inkl-exklusiv-Amazon/dp/B000GQLQUG/sr=1-2/'
          
'qid=1157647058/ref=pd_bowtega_2/302-5910331-8793668?ie=UTF8&s=dvd</a>';

$amaSearch = array();
$amaSearch[] = '/http:\/\/www\.amazon\.de\/exec\/obidos\/ASIN\/([0-9A-Z]+)\/?/';
$amaSearch[] = '/http:\/\/www\.amazon\.de\/gp\/product\/([0-9A-Z]+)\/?/';
$amaSearch[] = '/http:\/\/www\.amazon\.de\/(.*)\/dp\/([0-9A-Z]+)\/?/';

$amaReplace = array();
$amaReplace[] = 'http://www.amazon.de/exec/obidos/ASIN/$1/partnerlink-id/';
$amaReplace[] = 'http://www.amazon.de/exec/obidos/ASIN/$1/partnerlink-id/';
$amaReplace[] = 'http://www.amazon.de/exec/obidos/ASIN/$2/partnerlink-id/';

$max count($string);
for ( 
$i 0$i $max$i++ )
{
    echo 
$string[$i].':<br />'."\n";
    echo 
preg_replace($amaSearch$amaReplace$string[$i])."\n";
    echo 
'<hr />'."\n";
}
?>
Das Ergebnis sieht eigentlich schon nicht schlecht aus, allerdings wäre es mir lieber, wenn alles nach dem "partnerlink-id" komplett gelöscht wird. So das also nur noch "http://www.amazon.de/exec/obidos/ASIN/B000GIN50I/partnerlink-id/" übrig bleibt.

Kann da zufällig jemand helfen?

Geändert von Carsten Henkelmann (18-09-2006 um 20:20 Uhr)
Mit Zitat antworten
  #2 (permalink)  
Alt 18-09-2006, 19:25
Carsten Henkelmann
 Junior Member
Links : Onlinestatus : Carsten Henkelmann ist offline
Registriert seit: Mar 2002
Beiträge: 56
Carsten Henkelmann ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Äh... Kann das sein, dass dieses Forum hier die Strings im PHP-Beispiel bereits manipuliert? Die doppelten "<a href="..."> sind eigentlich nicht Bestandteil meines Sourcecodes.
Mit Zitat antworten
  #3 (permalink)  
Alt 18-09-2006, 19:31
penizillin
 PHP Guru
Links : Onlinestatus : penizillin ist offline
Registriert seit: Feb 2004
Beiträge: 10.166
penizillin ist zur Zeit noch ein unbeschriebenes Blatt
Standard

dein post wäre besser zu lesen, wenn man nicht meilenweit scrollen müsste.
Mit Zitat antworten
  #4 (permalink)  
Alt 18-09-2006, 19:37
Carsten Henkelmann
 Junior Member
Links : Onlinestatus : Carsten Henkelmann ist offline
Registriert seit: Mar 2002
Beiträge: 56
Carsten Henkelmann ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Das ist mir auch klar, aber es sind nun mal lange Strings (wie sie halt bei Amazon vorkommen), und die Forensoftware hängt selbst noch was dran.
Mit Zitat antworten
  #5 (permalink)  
Alt 18-09-2006, 19:37
Carsten Henkelmann
 Junior Member
Links : Onlinestatus : Carsten Henkelmann ist offline
Registriert seit: Mar 2002
Beiträge: 56
Carsten Henkelmann ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Ich habs ein wenig editiert, jetzt ist es nicht mehr ganz so extrem. Zumal jetzt auch die Forensoftware nicht mehr drauf anspringt.
Mit Zitat antworten
  #6 (permalink)  
Alt 18-09-2006, 20:01
Trashar
 PHP Senior
Links : Onlinestatus : Trashar ist offline
Registriert seit: Dec 2001
Ort: /root/
Beiträge: 1.366
Trashar ist zur Zeit noch ein unbeschriebenes Blatt
Trashar eine Nachricht über ICQ schicken Trashar eine Nachricht über AIM schicken
Standard

Zitat:
Original geschrieben von Carsten Henkelmann
Ich habs ein wenig editiert, jetzt ist es nicht mehr ganz so extrem. Zumal jetzt auch die Forensoftware nicht mehr drauf anspringt.
Bearbeite noch mal und schalte dann die nette Option "URLs automatisch umwandeln: fügt automatisch [ url] und [/ url] um Internetadressen ein." aus!!!
Mit Zitat antworten
  #7 (permalink)  
Alt 18-09-2006, 20:21
Carsten Henkelmann
 Junior Member
Links : Onlinestatus : Carsten Henkelmann ist offline
Registriert seit: Mar 2002
Beiträge: 56
Carsten Henkelmann ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Das brachte auch nicht viel. Ich hab die Strings daher noch weiter gesplittet.
Mit Zitat antworten
  #8 (permalink)  
Alt 18-09-2006, 20:33
subabrain
 Registrierter Benutzer
Links : Onlinestatus : subabrain ist offline
Registriert seit: Aug 2005
Ort: Psychiatrie
Beiträge: 404
subabrain ist zur Zeit noch ein unbeschriebenes Blatt
Standard

ich würde ja gerne helfen aber ich verstehe den Sinn des ganzen nicht .. evtl. formulierst du dein Problem so, dass es wirklich den Kern trifft und man nicht erst anhand des Codes irgendwas raten muss.

thx!

gruß
Robert
Mit Zitat antworten
  #9 (permalink)  
Alt 18-09-2006, 21:06
Carsten Henkelmann
 Junior Member
Links : Onlinestatus : Carsten Henkelmann ist offline
Registriert seit: Mar 2002
Beiträge: 56
Carsten Henkelmann ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Also...

Wenn man Partner bei Amazon ist, dann bekommt man eine Provision, wenn jemand über einen Link mit Deiner Partner-ID etwas dort bestellt. Dieser Link sieht in der Regel so aus (Beispiel):

http://www.amazon.de/exec/obidos/ASIN/B000GIN50I/partnerlink-ID

Das "B000GIN50I" ist lediglich die Produktnummer, dieser Teil ist also variabel. Das "partnerlink-ID" ist die eigene ID beim Amazon-Partnerprogramm, daran wird halt erkannt, dass der Kunde von Dir kam.

Das Problem ist nur, wenn jemand z.B. im eigenen Forum auf einen Artikel bei Amazon verweist, ist diese Partner-ID natürlich nicht dabei. An dieser Stelle soll dann die Routine greifen und die Partner-ID automatisch anhängen.

Das Problem ist nur, dass Amazon mehrere Varianten von Produktlinks hat, die sich in (bisher) drei Typen einteilen lassen (Beispiele):

1. http://www.amazon.de/exec/obidos/ASIN/B000GIN50I/
2. http://www.amazon.de/gp/product/B000GYJUSI/
3. http://www.amazon.de/Vendetta-Steel-inkl-exklusiv-Amazon/dp/B000GQLQUG/

Meistens hängt da noch mehr dran. Bei (1) ist die Nummer hinter "ASIN/" variabel, bei (2) das hinter "product/" und bei (3) ist der Text nach dem "amazon.de/" und vor dem "dp" variabel, wie auch der Wert nach dem "dp". Und diese drei Varianten möchte ich einheitlich auf eine Form bringen, mit meiner Partner-ID dran.

Da gibt es nur ein paar Probleme. Nicht nur die Tatsache, dass die Links durchaus noch länger sein können, mit weiteren (aber unwichtigen) Parametern, sondern in einem String können diese Links auch mehrmals vorkommen. Zum Beispiel im <a href=".."> und direkt danach nochmal als Linktext. Daher waren meine bisherige Versuche manchmal so "gierig" beim Ersetzen, dass teilweise der normale HTML-Code danach "verschluckt" wurde. Die ganzen Varianten im dem $strings-Array oben in meinem Sourcecode sollen halt diese ganzen Möglichkeiten in etwas abdecken, damit man auch testen kann, dass da nichts aus dem Ruder läuft.


Ich hoffe, es ist jetzt etwas besser verständlich geworden.
Mit Zitat antworten
  #10 (permalink)  
Alt 18-09-2006, 21:26
subabrain
 Registrierter Benutzer
Links : Onlinestatus : subabrain ist offline
Registriert seit: Aug 2005
Ort: Psychiatrie
Beiträge: 404
subabrain ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Zitat:
Original geschrieben von Carsten Henkelmann
Da gibt es nur ein paar Probleme. Nicht nur die Tatsache, dass die Links durchaus noch länger sein können, mit weiteren (aber unwichtigen) Parametern, sondern in einem String können diese Links auch mehrmals vorkommen. Zum Beispiel im <a href=".."> und direkt danach nochmal als Linktext.
ok also wenn ich richtig verstanden habe gehts darum, dass deine momentanen Suchmuster nicht alles korrekt erfassen wegen dieser beiden Probleme?

wenn ja bring bitte auch für diese beiden Probleme Beispiele, will heissen - welche Zeichen können konkret vorkommen - denn nur so ist es möglich ein passendes Suchmuster zu entwerfen.

gruß
Robert
Mit Zitat antworten
  #11 (permalink)  
Alt 19-09-2006, 09:12
sternm
 Banned
Links : Onlinestatus : sternm ist offline
Registriert seit: Sep 2006
Beiträge: 103
sternm ist zur Zeit noch ein unbeschriebenes Blatt
Standard

ich seh im grundsätzlichen mal keinen Fehler.
als preg-delimiter ist hier der / nicht gerade geeignet- kannst ein # oder noch
besser ein ! nehmen.
kannst die suchmuster mit einem abschliessenden whitespace machen, damit
werden die unerwünschten Parameter auch mitgematcht und ersetzt.

Für die Darstellung: machst im Eingabefenster erbarmungslos bei jedem
angezeigten Zeilenwechsel von Hand einen Zeilenumbruch hinein. Das
Vorschaufenster oben ist für dieses Problem nicht hilfreich. Noch besser geht's im
ändern-Fenster.

Deswegen steht hier auch :

Geändert von sternm (19-09-2006 um 09:19 Uhr)
Mit Zitat antworten
Antwort

Lesezeichen


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 

Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an


PHP News

ebiz-trader 7.5.0 mit PHP7 Unterstützung veröffentlicht
ebiz-trader 7.5.0 mit PHP7 Unterstützung veröffentlichtDie bekannte Marktplatzsoftware ebiz-trader ist in der Version 7.5.0 veröffentlicht worden.

28.05.2018 | Berni

Wissensbestand in Unternehmen
Wissensbestand in UnternehmenLebenslanges Lernen und Weiterbilden sichert Wissensbestand in Unternehmen

25.05.2018 | Berni


 

Aktuelle PHP Scripte

PHP Server Monitor

PHP Server Monitor ist ein Skript, das prüft, ob Ihre Websites und Server betriebsbereit sind.

11.09.2018 Berni | Kategorie: PHP/ Security
PHP WEB STATISTIK ansehen PHP WEB STATISTIK

Die PHP Web Statistik bietet Ihnen ein einfach zu konfigurierendes Script zur Aufzeichnung und grafischen und textuellen Auswertung der Besuchern Ihrer Webseite. Folgende zeitlichen Module sind verfügbar: Jahr, Monat, Tag, Wochentag, Stunde Folgende son

28.08.2018 phpwebstat | Kategorie: PHP/ Counter
Affilinator - Affilinet XML Produktlisten Skript

Die Affilinator Affilinet XML Edition ist ein vollautomatisches Skript zum einlesen und darstellen der Affili.net (Partnerprogramm Netzwerk) Produktlisten und Produktdaten. Im Grunde gibt der Webmaster seine Affilinet PartnerID ein und hat dann unmittelb

27.08.2018 freefrank@ | Kategorie: PHP/ Partnerprogramme
 Alle PHP Scripte anzeigen

Alle Zeitangaben in WEZ +2. Es ist jetzt 21:46 Uhr.