Wie Teil Informationen bei Digi-Key automatisch abgerufen werden

15

Wie automatisch abrufen, eine Digi-Key Teilenummer, Informationen wie Hersteller, Hersteller-Teilenummer, Beschreibung, usw. Vielleicht ist die GET http respose zu Parsen gegeben:

http://search.digikey.com/scripts/DkSearch/dksus.dll?Detail&name=DK_PART_NUMBER

(Dank angryee für die korrekten Parameter)

Wobei DK_PART_NUMBER die Digikey-Teilenummer ist.

Weiß jemand, wenn sie einen Web-Service oder einfach eine bessere Schnittstelle für dieses?


Nachdem diese Frage habe ich mich entschlossen voran und etwas schreiben zu gehen, die einige grundlegende fetching von Digikey tat:

dk_pn = '587-1962-1-ND'

from urllib import urlopen
from sgmllib import SGMLParser

headers = ['Digi-Key Part Number',
           'Manufacturer',
           'Manufacturer Part Number',
           'Description',
           'Lead Free Status / RoHS Status',
           'Operating Temperature',
           'Standard Package',
           'Price Break',
           'Unit Price',
           'Extended Price']

class DK_Parser(SGMLParser):
    def reset(self):

        SGMLParser.reset(self)

        self.last_td = ''
        self.inside_th = False
        self.inside_td = False
        self.grab_data = False
        self.part_info = {}
        self.hdr_index = 0
        self.row_hdrs = []

    def start_tr(self, attrs): # row
        self.first_header_in_row = True

    def start_th(self, attrs): # header cell
        if self.first_header_in_row:
            self.first_header_in_row = False
            self.row_hdrs = []
            self.hdr_index = 0
        self.inside_th = True

    def end_th(self):
        self.inside_th = False

    def start_td(self, attrs): # data cell
        self.inside_td = True

    def end_td(self): 
        self.inside_td = False
        self.hdr_index = self.hdr_index+1

    def handle_data(self,text):
        text = text.strip()
        if self.inside_th:
            if text in headers:
                self.row_hdrs.append(text)
                self.last_td = ''
                self.grab_data = True
            else:
                self.grab_data = False
        elif self.inside_td and self.grab_data:
            if self.hdr_index:
                self.last_td = ''
            if self.hdr_index < len(self.row_hdrs):
                self.last_td = self.last_td + text
                self.part_info[self.row_hdrs[self.hdr_index]] = self.last_td

dk_url = 'http://search.digikey.com/scripts/DkSearch/dksus.dll'
dk_params = '?Detail&name='

sock = urlopen(dk_url + dk_params + dk_pn)

parser = DK_Parser()
parser.feed(sock.read())
sock.close()
parser.close()

for k,v in parser.part_info.items():
    print k,":",v

Nur die erste Datenleitung den der [Preis Bruch / Stückpreis / extended Preis] Tabelle erfaßt wird.

Apalopohapa
quelle
4
Digikey hat jetzt Web - Service für die Suche und Bestellung, und hat einig Beispiel - Code für diesen: services.digikey.com
apalopohapa
3
BeautifulSoup ist wahrscheinlich der beste HTML - Parser für Python. Es ist viel schöner als der Stoff-in gebaut.
Connor Wolf

Antworten:

8

Sie würden wollen, anstatt das Schlüsselwort, um die Detail-Option verwenden. So was:

http://search.digikey.com/scripts/DkSearch/dksus.dll?Detail&name=458-1003-ND

Das gibt eine HTML-Seite, den Text, der analysiert werden kann. Es ist alles im Tabellenformat, so dass Sie eine Liste von Begriffen erstellen können, an denen Sie interessiert sind, und die Werte auswerten können. Ich kann eine Stückliste Skript sehen, die in einer Liste der Teile und die Werte, die Sie abrufen möchten nimmt (dh Spannung, Max Strom, oder aber Digikey Listen es) und dann einige Python machen die Teilenummer zu lesen, um die Seite packen, Analysieren Sie die Informationen und speichern Sie sie in einer CSV-, Datenbank- oder HTML-Datei. Ich habe denken an etwas Ähnliches gewesen und es nicht zu hart zu sein scheinen. Naja, hart genug, um mich davon abzuhalten, es jetzt sowieso rauszuschleudern :)

AngryEE
quelle
7

Vielleicht könnten Sie es durch tun Octopart API ?

pingswept
quelle
1
Auf der Dokumentationsseite können Sie nach Lieferanten filtern (in diesem Fall nach DigiKey), obwohl ich gerade auf der DigiKey-Website nach einer Handvoll Teilen gesucht habe und Octopart DigiKey in den Ergebnissen nicht erwähnt hat.
Flyguy
1
Offenbar Digikey hat sie ausdrücklich darum gebeten , sie nicht bei der Suche nach inlude.
apalopohapa
1
Seitdem hat sich das geändert. Digikey ist in den Ergebnissen enthalten. In diesem Jahr hat Octopart sogar keine Suchergebnisse von Digi-key angezeigt. Es scheint, als hätten sie etwas mit Digi-Key herausgefunden, und jetzt zeigt Octopart die Ergebnisse von Digi-Key
Kortuk,
1
Ich führe mein eigenes Python-Skript direkt gegen Digikey aus und frage die Octopart-API ab. Dabei erhalte ich unterschiedliche Ergebnisse. Auch direkt gegen digikey codierend, kann ich alternativen Verpackungslinks für das gleiche Teil folgen, ich denke nicht, dass Octopart dies richtig abbildet.
kert
4

Die aktuelle beste Antwort ist https://services.digikey.com/ als " die Digi-Key Search Web Service (SWS) und Bestell Web Service (OWS) bieten den Kunden in Echtzeit Zugriff auf Digi-Keys große Produktdatenbank und Bestell System. '.

Was Sie tun, ist „Screen Scraping“, die zum Bruch anfällig ist als DigiKey ihre Website aktualisiert.

Bryce
quelle
1
Ja. Dies wurde im Jahr 2010 gefragt , wann die diese Dienste noch nicht vorhanden sind. „Screen Scraping“ war die beste Lösung damals. Natürlich jede ist Technik zum Brechen anfällig , wenn die Systeme / Schnittstellen / API aktualisiert.
apalopohapa
2

Wenn Sie Ihre Stückliste als MS Excel-Tabelle speichern, können Sie die Preise über Daten-> Externe Daten abrufen-> Aus dem Web direkt in ein Arbeitsblatt ziehen. Ich verwende Excel 2010. Hier ist ein Makro, dass ich aus der Makroaufzeichnung verwenden.

Sub addDigikeyPriceExample()
    'http://www.digikey.com/product-detail/en/MANUFACTURERPARTNUM/DIGIKEYPARTNUM/PACKAGINGNUM ?
    With ActiveSheet.QueryTables.Add(Connection:= _
        "URL;http://www.digikey.com/product-detail/en/SI4707-B20-GM/336-2147-ND/2686997" _
        , Destination:=Range("$A$1"))
        .Name = "2622997" 'make random number?
        .FieldNames = True
        .RowNumbers = False
        .FillAdjacentFormulas = False
        .PreserveFormatting = True
        .RefreshOnFileOpen = False
        .BackgroundQuery = True
        .RefreshStyle = xlInsertDeleteCells
        .SavePassword = False
        .SaveData = True
        .AdjustColumnWidth = True
        .RefreshPeriod = 0
        .WebSelectionType = xlSpecifiedTables
        .WebFormatting = xlWebFormattingNone
        .WebTables = """pricing"""
        .WebPreFormattedTextToColumns = True
        .WebConsecutiveDelimitersAsOne = True
        .WebSingleBlockTextImport = False
        .WebDisableDateRecognition = False
        .WebDisableRedirections = False
        .Refresh BackgroundQuery:=False
    End With
End Sub
imjosh
quelle