কীভাবে ডিজি-কী থেকে স্বয়ংক্রিয়ভাবে অংশটি পুনরুদ্ধার করবেন


15

কীভাবে স্বয়ংক্রিয়ভাবে পুনরুদ্ধার করবেন, একটি ডিজি-কী অংশ নম্বর দেওয়া হয়েছে, যেমন প্রস্তুতকারক, প্রস্তুতকারকের অংশ নম্বর, বিবরণ ইত্যাদি তথ্য সম্ভবত জিইটি এইচটি পিএসপি সংশ্লেষকে পার্স করে:

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

(সঠিক পরামিতিগুলির জন্য রাগকারীকে ধন্যবাদ)

যেখানে ডি কে_পিলিঞ্জ্বল হ'ল ডিজিকি অংশ নম্বর।

তাদের জন্য একটি ওয়েব পরিষেবা আছে বা কেবল এর জন্য আরও ভাল ইন্টারফেস আছে কি কেউ জানেন?


এই প্রশ্নটি জিজ্ঞাসা করার পরে আমি সিদ্ধান্ত নিয়েছি যে এগিয়ে গিয়ে কিছু লিখব যা ডিজাইকেই থেকে কিছু বেসিক আনতে হবে:

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

[মূল্য ব্রেক / ইউনিট মূল্য / বর্ধিত মূল্য] সারণীর কেবলমাত্র প্রথম ডেটা লাইন ধরা পড়ে data


4
ডিজিগির এখন অনুসন্ধান এবং অর্ডার দেওয়ার জন্য ওয়েব পরিষেবা রয়েছে এবং এর জন্য কয়েকটি নমুনা কোড রয়েছে: Services.digikey.com
apalopohapa

3
বিউটিফুলসপ সম্ভবত পাইথনের জন্য সেরা এইচটিএমএল পার্সার। এটি বিল্ট-ইন স্টাফগুলির পরে খুব সুন্দর।
কনার ওল্ফ

উত্তর:


8

আপনি কীওয়ার্ডের পরিবর্তে বিশদ বিকল্পটি ব্যবহার করতে চান। এটার মত:

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

এটি এমন একটি HTML পৃষ্ঠা দেয় যা পাঠ্য যা পার্স করা যায়। এটি সমস্ত টেবিল বিন্যাসে যাতে আপনি আগ্রহী এমন পদগুলির একটি তালিকা তৈরি করতে এবং মানগুলি বিশ্লেষণ করতে পারেন। আমি একটি অংশের লিস্ট স্ক্রিপ্ট দেখতে পাচ্ছি যা অংশগুলির একটি তালিকা এবং আপনি যে মানগুলি পুনরুদ্ধার করতে চান তা গ্রহণ করে (যেমন, ভোল্টেজ, সর্বাধিক বর্তমান, তবে ডিজিকি এটি তালিকাভুক্ত করে) এবং তারপরে অংশ নম্বরটি পড়ার জন্য কিছু পাইথন তৈরি করুন, পৃষ্ঠাটি ধরুন, তথ্যটি বিশ্লেষণ করুন এবং এটি একটি সিএসভি, ডাটাবেস বা এইচটিএমএল ফাইলে আটকে দিন। আমি একই জাতীয় কিছু ভাবছিলাম এবং এটি খুব কঠিন বলে মনে হয় না। ঠিক আছে, এখনই যাইহোক আমাকে এটিকে চাবুক থেকে আটকাতে যথেষ্ট শক্ত :)


7

সম্ভবত আপনি এটি অক্টোপার্টের এপিআইয়ের মাধ্যমে করতে পারতেন ?


1
তাদের ডকুমেন্টেশন পৃষ্ঠা থেকে দেখে মনে হচ্ছে আপনি সরবরাহকারী (এই ক্ষেত্রে ডিজিজিকে) ফিল্টার করতে পারেন, যদিও আমি সবেমাত্র ডিজিগির ওয়েবসাইটে কয়েকটি মুঠোয় অংশ অনুসন্ধান করেছি এবং অক্টোপার্ট ফলাফলের মধ্যে ডিজিগিকে উল্লেখ করেনি।
ফ্লাইগুই

1
স্পষ্টতই ডিজিকি তাদের সন্ধানে তাদের অন্তর্ভুক্ত না করার জন্য বিশেষভাবে বলেছে।
আপালোপোহাপা

1
এর পরে এটি পরিবর্তিত হয়েছে, ডিজিকি ফলাফলগুলিতে অন্তর্ভুক্ত রয়েছে re স্পষ্টতই, এই বছরও, অক্টোপার্টটি ডিজি-কী থেকে অনুসন্ধানের ফলাফল প্রদর্শন করেনি। দেখে মনে হচ্ছে তারা ডিজি-কী নিয়ে কিছু কাজ করেছে এবং এখন অক্টোপোয়ার্ট ডিজি-কি থেকে ফলাফল প্রদর্শন করে
কর্টুক

1
আমি সরাসরি ডিজিটির বিপরীতে আমার নিজস্ব পাইথন স্ক্রিপ্ট চালাচ্ছি এবং অক্টোপার্ট এপিআই অনুসন্ধান করছি এবং আমি বিভিন্ন ফলাফল পাচ্ছি। এছাড়াও, ডিজিকেয়ের বিরুদ্ধে সরাসরি কোডিং আমি একই অংশের জন্য বিকল্প প্যাকেজিং লিঙ্কগুলি অনুসরণ করতে পারি, আমি মনে করি না অক্টোপार्टটি এটি সঠিকভাবে মানচিত্র করে।
ক্যারেট

4

বর্তমান সেরা উত্তরটি হল https://services.digikey.com/ হিসাবে ' দিগি-কী অনুসন্ধান ওয়েব পরিষেবা (এসডাব্লুএস) এবং অর্ডারিং ওয়েব সার্ভিস (ওডাব্লুএস) ক্লায়েন্টকে ডিজি-কি-র বিশাল প্রোডাক্ট ডাটাবেসে রিয়েল-টাইম অ্যাক্সেস সরবরাহ করে এবং অর্ডার করছে পদ্ধতি. '।

আপনি যা করছেন তা হ'ল "স্ক্রিন স্ক্র্যাপিং", যা ডিজিকি তাদের ওয়েবসাইট আপডেট করার সাথে সাথে ব্রেকিংয়ের পক্ষে ঝুঁকিপূর্ণ।


1
হ্যাঁ. ২০১০ সালে যখন জিজ্ঞাসা করা হয়েছিল যে পরিষেবাগুলি এখনও বিদ্যমান ছিল না। "স্ক্রিন স্ক্র্যাপিং" তখনকার সেরা সমাধান ছিল। অবশ্যই সিস্টেম / ইন্টারফেস / এপিআই আপডেট হয়ে গেলে যে কোনও কৌশল ভাঙ্গার পক্ষে ঝুঁকিপূর্ণ।
আপালোপোহাপা

2

অক্সোপার্টের এপিআই দিয়ে এটি করার জন্য এখানে অজগর, রুবি এবং জেএসের নমুনা কোড রয়েছে

http://octopart.com/api/docs/v3/overview#bom-matching

আপনি আবেদন স্তরে ডিজিগির জন্য ফিল্টার আউট করতে পারেন।


2

আপনি যদি নিজের বিওএমকে এমএস এক্সেল স্প্রেডশিট হিসাবে রাখেন, তবে আপনি ডেটা-> ওয়েব থেকে বহিরাগত তথ্য পান-> ওয়েবের মাধ্যমে সরাসরি ওয়ার্কশিটে দামগুলি টানতে পারেন। আমি এক্সেল 2010 ব্যবহার করছি Here এখানে ম্যাক্রো যা আমি ম্যাক্রো রেকর্ডার ব্যবহার করে তৈরি করেছি।

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
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.