इस प्रोजेक्ट के बारे में

discolike-python, DiscoLike API के लिए आधिकारिक Python SDK और CLI है, जो एक व्यावसायिक वेब खोज इंजन है जो दुनिया भर में 50 भाषाओं में 80 मिलियन से अधिक व्यावसायिक वेबसाइटों को इंडेक्स करता है। रिपॉजिटरी में दो पैकेज हैं: discolike (SDK लाइब्रेरी) और discolike-cli (टर्मिनल कमांड-लाइन इंटरफ़ेस, जो SDK पर निर्भर करता है)। दोनों को Python 3.10+ की आवश्यकता है। SDK, DiscoLike के API से इंटरैक्ट करने के लिए एक टाइप्ड क्लाइंट (Discolike) और एक async समकक्ष (AsyncDiscolike) प्रदान करता है। मुख्य क्षमताओं में शामिल हैं: ICP टेक्स्ट, वाक्यांशों, टेक स्टैक, भौगोलिक क्षेत्र और 40+ अन्य फिल्टरों द्वारा लुकअलाइक कंपनियों की खोज करना; उन्हें खींचने से पहले सेगमेंट की गिनती करना; मैला कंपनी नामों (वैकल्पिक फोन, शहर, राज्य के साथ) को सिंगल या बल्क CSV मोड में डोमेन से मिलाना; DiscoLike डेटासेट के साथ CSV डोमेन सूचियों को समृद्ध करना; डोमेन सूचियों का ऑटो-सेगमेंटेशन; ICP परिभाषाओं के विरुद्ध डोमेन सूचियों को मान्य करना; फर्मोग्राफिक्स, स्कोर, विकास डेटा, रीडायरेक्ट, विक्रेताओं और सहायक कंपनियों के साथ पूर्ण कंपनी प्रोफाइल प्राप्त करना; लक्षित कंपनियों में संपर्कों को खोजना, देखना, मिलाना और खोजना; और वेब खोज सक्षम के साथ डोमेन के सेट पर DiscoGen शोध चलाना। प्रमाणीकरण तीन तरीकों का समर्थन करता है: signup (ब्राउज़र के बिना ईमेल और नाम से एक खाता खोलता है, मालिक ईमेल द्वारा पुष्टि करता है), OAuth लॉगिन (लूपबैक रीडायरेक्ट के साथ ब्राउज़र-आधारित PKCE प्राधिकरण कोड प्रवाह, या URL प्रिंट करने वाला हेडलेस मोड), और API कुंजी (पर्यावरण चर DISCOLIKE_API_KEY, CLI कॉन्फ़िग फ़ाइल, या स्पष्ट पैरामीटर के माध्यम से)। OAuth क्रेडेंशियल समाप्ति से 60 सेकंड पहले और 401 के बाद एक बार फिर से सक्रिय रूप से रीफ्रेश होते हैं। क्लाइंट अपने स्वयं के httpx2.Client या httpx2.AsyncClient लाने का भी समर्थन करता है। सभी अनुरोध मॉडल प्लेटफ़ॉर्म के OpenAPI स्पेक से उत्पन्न होते हैं और कोई भी अनुरोध भेजने से पहले Pydantic के साथ स्थानीय रूप से मान्य किए जाते हैं, इसलिए खराब enum मान या सीमा से बाहर की संख्याएँ कभी भी राउंड ट्रिप की लागत नहीं देतीं। सभी प्रतिक्रियाएँ टाइप की गई Pydantic मॉडल हैं। त्रुटियाँ DiscolikeError से विरासत में मिलती हैं, जिनमें प्रमाणीकरण, प्लान एक्सेस, नॉट फाउंड, सर्वर, रेट लिमिट, सत्यापन और API कनेक्शन विफलताओं के लिए विशिष्ट उपवर्ग हैं। क्षणिक विफलताओं को स्वचालित रूप से पुनः प्रयास किया जाता है (डिफ़ॉल्ट रूप से 3 प्रयास)। लंबे समय तक चलने वाले बल्क ऑपरेशन (match.bulk, segment, validate_icp, contacts.bulk_match) ब्लॉक करने के बजाय एक Job हैंडल लौटाते हैं। Job.wait() पूरा होने तक ब्लॉक करता है, Job.status() बिना ब्लॉक किए पोल करता है, और Job.cancel() रद्द कर देता है। DiscoGen-परिवार के जॉब्स पर, लौटाई गई JobStatus में चेतावनी, estimated_cost, और cost_metadata शामिल होते हैं जिसमें प्रति-मॉडल उपयोग और खोज प्रदाता प्रविष्टियाँ होती हैं। JobTimeoutError केवल क्लाइंट-साइड प्रतीक्षा सीमा है — कार्य सर्वर-साइड चलता रहता है, इसलिए फिर से शुरू करने के लिए wait() को पुनः कॉल किया जा सकता है। CLI, SDK की क्षमताओं को दर्शाता है, जिसमें discover, count, match, extract, validate-icp, append, segment, signup कमांड हैं, साथ ही auth, company, contacts, discogen, queries, account, search-providers, और llm-providers के लिए कमांड समूह हैं। परिणाम डिफ़ॉल्ट रूप से stdout पर JSON के रूप में प्रिंट होते हैं, जब stdout TTY होता है तो मानव-पठनीय आउटपुट के लिए --format table विकल्प होता है। Async एंडपॉइंट --wait स्वीकार करते हैं ताकि कार्य समाप्त होने तक ब्लॉक किया जा सके, या पोलिंग के लिए task_id लौटाते हैं। निकास कोड मानकीकृत हैं: 0 सफलता, 1 सर्वर त्रुटि, 2 सत्यापन त्रुटि, 3 प्रमाणीकरण/प्लान त्रुटि, 4 रेट सीमित, 5 नेटवर्क त्रुटि, 6 नॉट फाउंड। रिपॉजिटरी एक uv वर्कस्पेस के रूप में संरचित है जिसमें दो सदस्य हैं: packages/discolike (SDK) और packages/discolike-cli (CLI)। विकास में pytest परीक्षण के लिए, ruff लिंटिंग के लिए, और OpenAPI स्पेक से अनुरोध मॉडल को पुनः उत्पन्न करने के लिए एक कोड जनरेशन स्क्रिप्ट (scripts/gen_requests.py) का उपयोग किया जाता है। examples/ फ़ोल्डर में सामान्य वर्कफ़्लो के लिए चलने योग्य स्क्रिप्ट हैं, जिनमें चेकपॉइंटिंग और रिज़्यूम के साथ CRM संपर्क निर्यात को DiscoLike persona ID से मिलाना, CSV से बल्क में कार्य ईमेल ढूँढना, और ICP द्वारा कंपनियों की खोज करना तथा उन्हें DiscoGen से समृद्ध करना शामिल है। परियोजना MIT लाइसेंस के अंतर्गत है।