• Hallo liebe Userinnen und User,

    nach bereits längeren Planungen und Vorbereitungen sind wir nun von vBulletin auf Xenforo umgestiegen. Die Umstellung musste leider aufgrund der Serverprobleme der letzten Tage notgedrungen vorverlegt werden. Das neue Forum ist soweit voll funktionsfähig, allerdings sind noch nicht alle der gewohnten Funktionen vorhanden. Nach Möglichkeit werden wir sie in den nächsten Wochen nachrüsten. Dafür sollte es nun einige der Probleme lösen, die wir in den letzten Tagen, Wochen und Monaten hatten. Auch der Server ist nun potenter als bei unserem alten Hoster, wodurch wir nun langfristig den Tank mit Bytes vollgetankt haben.

    Anfangs mag die neue Boardsoftware etwas ungewohnt sein, aber man findet sich recht schnell ein. Wir wissen, dass ihr alle Gewohnheitstiere seid, aber gebt dem neuen Board eine Chance.
    Sollte etwas der neuen oder auch gewohnten Funktionen unklar sein, könnt ihr den "Wo issn da der Button zu"-Thread im Feedback nutzen. Bugs meldet ihr bitte im Bugtracker, es wird sicher welche geben die uns noch nicht aufgefallen sind. Ich werde das dann versuchen, halbwegs im Startbeitrag übersichtlich zu halten, was an Arbeit noch aussteht.

    Neu ist, dass die Boardsoftware deutlich besser für Mobiltelefone und diverse Endgeräte geeignet ist und nun auch im mobilen Style alle Funktionen verfügbar sind. Am Desktop findet ihr oben rechts sowohl den Umschalter zwischen hellem und dunklem Style. Am Handy ist der Hell-/Dunkelschalter am Ende der Seite. Damit sollte zukünftig jeder sein Board so konfigurieren können, wie es ihm am liebsten ist.


    Die restlichen Funktionen sollten eigentlich soweit wie gewohnt funktionieren. Einfach mal ein wenig damit spielen oder bei Unklarheiten im Thread nachfragen. Viel Spaß im ngb 2.0.

AMAZON | verfügbare Anzahl eines Atrtikels auslesen

kaiwe

Neu angemeldet

Registriert
31 Aug. 2016
Beiträge
9
Hallo zusammen,

ich möchte täglich die Anzahl der verfügbaren Stückzahl bei mehreren Artikeln beobachten.

Nachdem das händisch ein "Mega Aufwand" ist, bin ich auf der Suche nach einer Möglichkeit,
das zu automatisieren.

Die API von AMAZON erlaubt dies nicht, ebensowenig habe ich bei GOOGLE was passendes
gefunden.

Kann mir bitte jemand helfen ?
 

Jester

★★★★☆ (Kasparski)

Registriert
1 Dez. 2014
Beiträge
6.066
Ort
Code Azure
Im Artikel ist die Menge erkennbar an

[src=html5]
<div id="availability" class="a-section a-spacing-none">
<span class="a-size-medium a-color-success">
Nur noch 12 auf Lager
</span>
</div>
[/src]

Also eine Liste der URLs oder einen URL-Generator mit den IDs bauen, per AJAX o.ä. HTTPREQUESTen, den DOM Tree parsen und auslesen oder den parseInt() des innerHTML des ersten Kindes bzw SPANs der ID #availability nehmen.
 
Zuletzt bearbeitet:

kaiwe

Neu angemeldet

Registriert
31 Aug. 2016
Beiträge
9
  • Thread Starter Thread Starter
  • #3
Hallo Jester,

vielen Dank für Deine schnelle Antwort ! Leider ist die Sache sehr viel komplexer.

Bei vielen Artikeln steht nämlich nichts bzw. "Auf Lager", dann muss man einen Trick anwenden.

Man legt 1 Stück in den Warenkorb, ändert dann im Warenkorb die Menge auf 10+, dann erscheint
ein Eingabefeld, in welches man 999 schreibt.

Daraufhin gibt es eine "Fehlermeldung" in der Art:

"Bei diesem Anbieter sind derzeit nur 78 Exemplare verfügbar. Möchten Sie eine größere Menge bestellen,
kehren Sie bitte zur Produktseite zurück, um zu prüfen, ob ein weiterer Händler Ihre gewünschte Menge anbietet."

Ich will den Wert "78" auslesen und dabei den gesamten Prozess automatisieren.

Vielen Dank !


AMAZON_verfuegbare-Menge.jpg
 
Zuletzt bearbeitet:

virtus

Gehasst

Registriert
24 Apr. 2015
Beiträge
1.689
Ort
AUF DEM MOND
Das wird aufwändiger, aber nicht unmöglich. Im Prinzip muss deine Anwendung nur exakt das Gleiche machen.

[src=text]Rufe Produktseite auf
Prüfe ob eine Anzahl angegeben ist
falls ja
gib die Anzahl zurück
sonst
lege das Produkt in Warenkorb
erhöhe die Stückzahl auf 999
parse Fehlermeldung
entferne das Produkt aus dem Warenkorb
gib die Anzahl zurück[/src]

Das was für dich aufwändig sein wird, ist wahrscheinlich das Interface. Das kannst du aber beim Programmieren vernachlässigen.
Das Interface wird ja nur für den Anwender geschrieben, damit dieser so bequem wie möglich auswählen kann, was er möchte.
Deine Anwendung ist allerdings selbstständig genug um gleich als gewünschte Anzahl 999 auszuwählen.
Ggf. musst du mit einem Login arbeiten, ich weiß nicht auswendig, an welcher Stelle Amazon einen Login erfordert.
Im Prinzip werden das alles nur AJAX-Requests, die du entsprechend auswerten musst.
 

kaiwe

Neu angemeldet

Registriert
31 Aug. 2016
Beiträge
9
  • Thread Starter Thread Starter
  • #5
Hallo virtus,

ich möchte jetzt nicht in ein Fettnäpfchen treten, aber es überrascht mich doch ein ganz klein wenig,
dass Du mir scheinbar auch jenen winzig kleinen Funken rudimentärer Restintelligenz - der nötig ist,
um den strukturellen Ablauf dieser Aufgabe intellektuell zu erfassen und zu dokumentieren - absprichst.

Aber jetzt im Ernst:

Mein Problem ist es, nicht in den Tiefen der AJAX Programierung beheimatet zu sein.

Anders ausgedrückt: Ich bin auf der Suche nach Hilfe beim konkreten Erstellen eines solchen Scripts.

Natürlich auch gegen eine kleine Gebühr, obwohl ich dann ( SORRY !!!!!!! ) hier vielleicht im falschen
Bereich poste.
 

Jester

★★★★☆ (Kasparski)

Registriert
1 Dez. 2014
Beiträge
6.066
Ort
Code Azure
@kaiwe: Hey, ich hatte mich auf die Ausgabe der Detailseite des Produkts bezogen, ist das dort auch so?
 

Rakorium-M

NGBler

Registriert
14 Juli 2013
Beiträge
413
Ich hab das Ganze mal schnell in Python runtergeschrieben. Funktioniert so:
  • Produktseite aufrufen
  • das "In den Warenkorb legen" Formular parsen, 999 einsetzen und absenden
  • die genaue Zahl aus der Fehlermeldung ziehen.
Alles in Allem 50 Zeilen. Die Ergebnisse speichern und auswerten überlasse ich anderen.

@kaiwe: Ich empfehle dir, den Code genau anzuschauen. Gerade für solche Automatisierungen ist Python wie geschaffen. Das Prinzip kann man schnell auch auf andere Probleme übertragen.

[src=python]import requests
from BeautifulSoup import BeautifulSoup
import re


headers = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:47.0) Gecko/20100101 Firefox/47.0",
"Accept-Language": "de,en-US;q=0.7,en;q=0.3"
}


def check_amazon_status(url):
# Produktseite abrufen
s = requests.Session()
print ">>",url
response = s.get(url, headers=headers)

# Das "Zum Warenkorb hinzufuegen"-Formular nachbauen -
# dazu suchen wir alle <input>-Tags und speichern die in "values"
form = BeautifulSoup(response.text).findAll('form', id='addToCart')
form = form[0]
url2 = 'https://www.amazon.de' + form['action']
values = {}

for field in form.findAll('input'):
if not field.has_key('name') or not field.has_key('value'):
continue
if field['type'] != 'submit':
values[field['name']] = field['value']
elif field['name'] == 'submit.add-to-cart':
values[field['name']] = field['value']
# quantity ueberschreiben wir mit 999, um den Fehler zu provozieren
values['quantity'] = '999'

# Zum Warenkorb hinzufuegen - wir senden das nachgebaute Formular
print ">>",url2
response = s.post(url2, headers=headers, data=values)

# wir nutzen einen regulaeren Ausdruck, um die Antwort im Text zu suchen. Nicht effizient, aber leicht zu coden.
match = re.search(r'momentan lediglich: (\d+)\.', response.text)
if match == None:
print "Keine Fehlermeldung gefunden!"
return None
print '-->',match.group(0) # der gefundene Text
return int(match.group(1)) # die gefundene Zahl im Text


# Beispiel
print check_amazon_status('https://www.amazon.de/Das-schwarze-Auge-Drakensang-Platinum/dp/B00553J2PQ/ref=sr_1_1?ie=UTF8&qid=1472735369&sr=8-1&keywords=drakensang')
[/src]
Der Code basiert auf Python 2 (nicht 3). Außerdem muss requests und BeautifulSoup installiert sein (gibt's beides über pip).
 

kaiwe

Neu angemeldet

Registriert
31 Aug. 2016
Beiträge
9
  • Thread Starter Thread Starter
  • #8
Hallo Rakorium-M,

vielen, vielen Dank für Deine Hilfe !!! Ich habe jetzt leider überhaupt keine Ahnung von Python ;-((
Aber ich werde mich da jetzt ganz schnell einarbeiten ;-)

Auf meiner LINUX Entwicklungsmaschine habe ich ein Python 2.7.8

Der Befehl >>> print "Python lernen!" klappt schon mal;-)
 
Zuletzt bearbeitet:

Rakorium-M

NGBler

Registriert
14 Juli 2013
Beiträge
413
Gern geschehen. Gerade für solche Automatisierungs-Funktionen ist Python einfach praktisch - ist eine gute Idee, dich darin mal einzuarbeiten :)
 

virtus

Gehasst

Registriert
24 Apr. 2015
Beiträge
1.689
Ort
AUF DEM MOND
ich möchte jetzt nicht in ein Fettnäpfchen treten, aber es überrascht mich doch ein ganz klein wenig,
dass Du mir scheinbar auch jenen winzig kleinen Funken rudimentärer Restintelligenz - der nötig ist,
um den strukturellen Ablauf dieser Aufgabe intellektuell zu erfassen und zu dokumentieren - absprichst.
Da du explizit die eine API von Amazon angesprochen hast, bin ich erst mal davon ausgegangen, dass Programmierkenntnisse vorhanden sind.
Da du von "mega Aufwand" gesprochen hast, bin ich davon ausgegangen, dass du lediglich Probleme mit der Umsetzung hast und dir die Lösung komplexer machst/ vorstellst, als nötig.

Anders ausgedrückt: Ich bin auf der Suche nach Hilfe beim konkreten Erstellen eines solchen Scripts.
Das wurde aus deinem Posting nicht ganz klar, aber wie du siehst (vgl Beitrag von Rakorium-M), ist es gar nicht so kompliziert.
 
Oben