Dify + Scrapeless: अपने एजेंटों को एक कस्टम टूल के साथ लाइव वेब डेटा दें
Advanced Data Extraction Specialist
TL;DR:
- Dify Marketplace में Deep SerpApi प्लगइन एक उपकरण को एक पैरामीटर के साथ पेश करता है,
query, इसलिए कोई भी अनुरोध जिसे एक परिणाम वर्टिकल, एक पृष्ठ ऑफसेट, या एक अलग साइट की आवश्यकता होती है, उसे कहीं और से आना होगा। - एक कस्टम टूल एक OpenAPI फ़ाइल है। Dify इसे एकल ऑपरेशन,
scraperRequestमें पार्स करता है, जो Scrapelessscraper.*अभिनेता परिवार तक एक एंडपॉइंट के माध्यम से पहुँचता है। - Dify दो प्रमाणीकरण फ़ील्ड को उन मूल्यों के साथ पूर्व-भरता है जिन्हें यह API अस्वीकार करता है: हेडर नाम डिफ़ॉल्ट रूप से
Authorizationऔर हेडर प्रीफिक्स डिफ़ॉल्ट रूप सेBasicहोता है। किसी भी डिफ़ॉल्ट का परिणाम401होता है{"code":14404,"message":"invalid access token"}के साथ। - Dify नस्टेड
inputवस्तु को एक string पैरामीटर के रूप में टाइप करता है, इसलिए एक कोड नोड जो JSON पाठ को उत्पन्न करता है, इसे एक वर्कफ़्लो के अंदर बनाने का विश्वसनीय तरीका है। - एक Amazon उत्पाद कॉल लगभग 2.2 MB का डेटा लौटाता है, जिसमें से 1.9 MB कच्चा
htmlहोता है। एक कोड नोड मेंresultका चयन करें इससे पहले कि पेलोड एक मॉडल तक पहुंचे। - एक मुफ्त Scrapeless खाता इस गाइड में हर अनुरोध को कवर करता है।
एक Dify एजेंट जिसके पास कोई वेब टूल नहीं है, अपने मॉडल वेट्स और जो कुछ आपने इसके ज्ञान आधार में अपलोड किया है, से उत्तर देता है। इससे आज के शीर्ष रैंकिंग पृष्ठों, किसी प्रतिस्पर्धी की वर्तमान कीमत, या एक विशेष शहर में ऑपरेटिंग प्लंबर्स के बारे में पूछें, और यह कुछ प्रवाही और पुरानी जानकारी उत्पन्न करेगा।
Dify इसका समाधान उपकरणों के माध्यम से करता है, और एक जोड़ने के दो तरीके हैं। यह गाइड दूसरे तरीके की बात करती है: एक कस्टम उपकरण जो एक OpenAPI फ़ाइल से बनाया गया है, जो हर एजेंट और वर्कफ़्लो में Scrapeless Scraping API को एक कॉल करने योग्य क्रिया में बदलता है।
कस्टम टूल क्या जोड़ता है जो प्लगइन नहीं करता
आधिकारिक Deep SerpApi सूची Dify Marketplace में एक एकल आवश्यक पैरामीटर, query, और API कुंजी के लिए एक प्रमाण पत्र फ़ील्ड को प्रस्तुत करता है। यदि एक साधारण Google खोज ही आपकी कार्यप्रवाह को चाहिए, तो इसे स्थापित करें और पढ़ना बंद करें - यह दो क्लिक में होता है और यह काम करता है, और Dify पर निर्मित व्यवसाय समाचार मॉनिटर इसके चारों ओर एक पूर्ण कार्यप्रवाह दिखाता है।
इसके पीछे Scrapeless HTTP एंडपॉइंट काफी अधिक स्वीकार करता है बनिस्बत एक क्वेरी स्ट्रिंग के। वही अनुरोध आकार स्थानीय पैक का चयन करता है बजाय वेब परिणामों के, उन परिणामों के दूसरे पृष्ठ पर ऑफसेट करता है, या पूरी तरह से एक Amazon लिस्टिंग पर स्विच करता है। इनमें से कोई भी एकल query फ़ील्ड के माध्यम से नहीं पहुँचा जा सकता।
एक कस्टम टूल उस अंतर को बंद करता है। आप एक OpenAPI दस्तावेज़ पेस्ट करते हैं, Dify इसमें से ऑपरेशनों को पढ़ता है, और पूरा अभिनेता परिवार एक जोड़ा जाने योग्य टूल बन जाता है। न तो कुछ स्थापित करने की आवश्यकता होती है और न ही कुछ तैनात करने की, और वही फ़ाइल Dify क्लाउड और एक स्वयं-होस्टेड उदाहरण पर काम करती है।
स्क्रैपिंग API क्या लौटाता है
एक एंडपॉइंट हर अनुरोध को लेता है: POST https://api.scrapeless.com/api/v1/scraper/request। बॉडी में दो फ़ील्ड होते हैं – actor स्क्रेपर का नाम देता है, और input उस स्क्रेपर के पैरामीटर ले जाता है।
प्रतिक्रिया पार्स की गई JSON होती है न कि HTML। एक scraper.google.search कॉल organic_results को शीर्ष स्तर पर metadata, pagination, और search_information के बगल में रखता है। समान अभिनेता में tbm: lcl जोड़ने से उसे local_results.places के लिए स्वैप किया जाता है, जो रेटिंग, फोन नंबर, और पते के साथ व्यवसायों का एक ब्लॉक है। एक scraper.amazon कॉल पार्स की गई उत्पाद को result के अंतर्गत नेस्ट करता है।
वही एक-आकार डिज़ाइन है जो एक OpenAPI ऑपरेशन को पर्याप्त बनाता है। हर अभिनेता के पैरामीटर का विवरण Scraping API दस्तावेज़ीकरण में है।
पूर्वापेक्षाएँ
- एक Dify कार्यक्षेत्र - क्लाउड, या 1.0.0 या बाद में स्वयं-होस्टेड। यहाँ वर्णित व्यवहार एक स्वयं-होस्टेड 1.16.1 उदाहरण पर मापा गया था।
- डैशबोर्ड से एक Scrapeless API कुंजी।
- टूल जोड़ने की कार्यक्षेत्र अनुमति। Dify कस्टम-टूल एंडपॉइंट्स को कार्यक्षेत्र प्रशासकों और मालिकों तक सीमित करता है।
चरण 1: OpenAPI स्कीमा को आयात करें
Dify में, Tools → Custom → Create Custom Tool खोलें और नीचे दिए गए दस्तावेज़ को पेस्ट करें। यह OpenAPI 3.0.3 स्पेसिफिकेशन के खिलाफ मान्य है, जो Dify के पार्सर की अपेक्षा है।
yaml
openapi: 3.0.3
info:
title: Scrapeless Scraper API
version: "1.0.0"
servers:
- url: https://api.scrapeless.com
paths:
/api/v1/scraper/request:
post:
operationId: scraperRequest
summary: Run a scraper actor and return structured data
security:
- ApiTokenAuth: []
requestBody:
required: true
content:
application/json:
schema:
type: object
required: [actor, input]
properties:
actor:
type: string
description: Which scraper to run.
enum: [scraper.google.search, scraper.amazon]
example: scraper.google.search
input:
type: object
description: Actor parameters. Keys depend on the actor.
additionalProperties: true
examples:
googleSearch:
summary: Google SERP
value:
actor: scraper.google.search
input:
q: web scraping api
googleLocalPack:
summary: Google local pack
value:
actor: scraper.google.search
input:
q: plumbers in Austin, TX
tbm: lcl
amazonProduct:
summary: Amazon product by URL
value:
actor: scraper.amazon
input:
action: product
url: https://www.amazon.com/dp/B09B8V1LZ3
responses:
'200':
description: Parsed result. Shape depends on the actor.
content:
application/json:
schema:
type: object
additionalProperties: true
components:
securitySchemes:
ApiTokenAuth:
type: apiKey
in: header
name: x-api-token
Dify इसे एक ही उपकरण में पार्स करता है। नाम operationId से आता है, इसलिए टूल का नाम scraperRequest है, और इसमें दो पैरामीटर होते हैं: actor और input। तीन नामित उदाहरण अनुरोध निर्माता में दिखाई देते हैं, जो Amazon URL को हाथ से टाइप करने की आवश्यकता को समाप्त करता है।
चरण 2: सभी चार प्रमाणीकरण फ़ील्ड भरें
API कुंजी प्रमाणीकरण चुनें और हर फ़ील्ड सेट करें। चार में से दो पूर्व-भरे हुए आते हैं जिनमें ऐसे मान होते हैं जिन्हें यह API अस्वीकार करता है:
| फ़ील्ड | सेट करने के लिए क्या | Dify द्वारा पूर्व-भरा गया |
|---|---|---|
| प्राधिकरण प्रकार | API Key (api_key_header के रूप में संग्रहीत) |
None |
| हेडर नाम | x-api-token |
Authorization |
| मान | आपका Scrapeless API कुंजी | खाली |
| हेडर उपसर्ग | Custom |
Basic |
उपसर्ग क्षेत्र वही है जो लोगों को पकड़ता है। Dify इसे मान पर जोड़ता है, इसलिए Basic पर छोड़ने से हेडर x-api-token: Basic <your-key> भेजता है। इसका मतलब बुनियादी HTTP प्रमाणीकरण योजना नहीं है — एक वास्तविक बुनियादी क्रेडेंशियल एक base64-कोडित user:password जोड़ी है — और Scrapeless नग्न कुंजी की अपेक्षा करता है, इसलिए अनुरोध अस्वीकृत हो जाता है। Bearer समान रूप से विफल होता है। केवल Custom मान को बिना छेड़े पास करता है।
हेडर नाम को Authorization पर छोड़ने से समान तरीके से विफल होता है, उसी कारण से: कुंजी कभी भी उस हेडर में नहीं जाती जिसे API पढ़ता है।
दोनों गलतियाँ एक प्रतिक्रिया उत्पन्न करती हैं, और आप उनमें से किसी एक को टर्मिनल से बिना Dify को छूने के पुनः उत्पन्न कर सकते हैं:
bash
# Correct: bare key in x-api-token
curl -s -o /dev/null -w 'bare key -> %{http_code}\n' \
-X POST https://api.scrapeless.com/api/v1/scraper/request \
-H "Content-Type: application/json" \
-H "x-api-token: $SCRAPELESS_API_KEY" \
-d '{"actor":"scraper.google.search","input":{"q":"web scraping api"}}'
# What Dify sends with the default prefix
curl -s -w '\nBasic prefix -> %{http_code}\n' \
-X POST https://api.scrapeless.com/api/v1/scraper/request \
-H "Content-Type: application/json" \
-H "x-api-token: Basic $SCRAPELESS_API_KEY" \
-d '{"actor":"scraper.google.search","input":{"q":"web scraping api"}}'
# What Dify sends with the default header name
curl -s -w '\nAuthorization -> %{http_code}\n' \
-X POST https://api.scrapeless.com/api/v1/scraper/request \
-H "Content-Type: application/json" \
-H "Authorization: $SCRAPELESS_API_KEY" \
-d '{"actor":"scraper.google.search","input":{"q":"web scraping api"}}'
text
bare key -> 200
{"code":14404,"message":"invalid access token"}
Basic prefix -> 401
{"code":14404,"message":"invalid access token"}
Authorization -> 401
यहाँ एक 401 सर्वर द्वारा आपको बताने वाला है कि इसे प्राप्त क्रेडेंशियल स्वीकार्य नहीं है, जो कि HTTP सेमेण्टिक्स विनिर्देश उसी स्थिति के लिए आरक्षित है। शरीर इसे और संकीर्ण करता है: कोड 14404 विशेष रूप से एक अनुपयोगी टोकन है, न कि एक दोषपूर्ण अनुरोध।
चरण 3: अंतर्निहित परीक्षण चलाएँ
Dify का परीक्षण पैनल उस अंत बिंदु को उन क्रेडेंशियल के साथ कॉल करता है जिन्हें आपने अभी प्रविष्ट किया है। दो मानकों को भरें:
json
{
"actor": "scraper.google.search",
"input": "{\"q\": \"web scraping api\"}"
}
एक कार्यशील विन्यास लगभग 15 KB का SERP JSON लौटाता है। एक टूटे हुए उपसर्ग से एकल त्रुटि स्ट्रिंग लौटती है जो अपस्ट्रीम शरीर को शब्दशः ले जाती है: Request failed with status code 401 and {"code":14404,"message":"invalid access token"}।
परीक्षण पेलोड में उद्धरण का ध्यान रखें। Dify अंतर्निहित अनुरोध-शरीर गुणों को समतल करता है, इसलिए input को एक स्ट्रिंग मान के रूप में पंजीकृत किया जाता है न कि एक ऑब्जेक्ट के रूप में — पार्स की गई स्कीमा actor और input दोनों को string के रूप में बताती है, दोनों आवश्यक हैं। एक वास्तविक JSON ऑब्जेक्ट पैनल में भी काम करता है, क्योंकि Dify किसी भी रूप को उस ऑब्जेक्ट में सामान्यीकृत करता है जिसकी API अपेक्षा करती है। वह परिवर्तन महत्वपूर्ण है: एक अनुरोध जो हाथ से अंत बिंदु के खिलाफ बनाया गया है, को एक ऑब्जेक्ट भेजना होता है, और वहाँ एक स्ट्रिंग 400 {"message":"invalid input body"} के रूप में वापस आती है।
जब परीक्षण डेटा लौटाता है तो प्रदाता को सहेजें। scraperRequest फिर कार्यक्षेत्र में प्रत्येक ऐप के लिए उपकरण सूची में दिखाई देता है।
क्या आप इसे मुफ्त योजना पर बना रहे हैं? एक Scrapeless खाता बनाएं और इस गाइड में अनुरोध मुफ्त कोटा पर चलते हैं।
क्या वापस आता है
लिफाफा अभिनेता पर निर्भर करता है, और प्रत्येक आकार नीचे की ओर विभिन्न हैंडलिंग चाहता है।
वेब खोज। scraper.google.search के साथ {"q": "web scraping api"} ने 15 KB प्रतिक्रिया में आठ organic_results लौटाए, metadata, pagination, search_information, related_searches, और एक inline_videos ब्लॉक के साथ। प्रत्येक परिणाम में title, link, snippet, source, position, और snippet_highlighted_words होता है।
स्थानीय पैक। tbm: lcl जोड़ने से organic_results को local_results.places से बदला जाता है — प्रति अनुरोध 20 व्यवसाय। start: 20 सेट करने से अगला पृष्ठ लौटता है; एक प्रश्न के दो लगातार पृष्ठों में, 40 में से 37 रिकॉर्ड भिन्न थे, इसलिए एक प्रवाह जो दोनों पृष्ठों को संग्रहीत करता है उसे कुछ स्थिर चीज़ पर कुंजी बनानी चाहिए न कि कोई पुनरावृत्ति मानकर।
स्थानीय-पैक क्षेत्रों को CRM या स्प्रेडशीट तक पहुँचने से पहले एक सफाई पास की आवश्यकता होती है:
phone,type, औरhoursएक अग्रणी स्थान के साथ पैडेड आते हैं, और कुछ घंटे की स्ट्रिंग सामान्य के बजाय संकीर्ण नॉन-ब्रेक स्थान का उपयोग करती हैं।phoneएक कैप्चर में 20 में से 15 रिकॉर्ड में फोन के आकार का मान रखता है; बाकी में उद्घाटन समय याOnline estimatesजैसे सेवा लेबल होते हैं।place_id,place_id_search,lsig, औरthumbnailसभी 20 रिकॉर्ड में खाली थे।gps_coordinatesउपस्थित है लेकिन{"latitude": 0, "longitude": 0}के रूप में पढ़ता है, इसलिए यह सत्यता जांच पास करता है जबकि कोई स्थान नहीं रखता है।
अमेज़न। scraper.amazon के साथ action: product ने 2,226,755 बाइट्स लौटाए। result के अंतर्गत पार्स की गई उत्पाद 63 क्षेत्रों में 4,608 बाइट्स है; शेष 1,960,588 बाइट्स लिस्टिंग का कच्चा html है। उस पूरे पेलोड को एक मॉडल को सौंपना महंगा और निरर्थक है।
उत्तर को मॉडल तक पहुँचने से पहले ट्रिम करें
साधन नोड के सीधे बाद में एक कोड नोड डालें। यह Python 3 या JavaScript चलाता है, उपकरण आउटपुट को एक इनपुट चर के रूप में लेता है, और एक dict लौटाता है जिसे बाद वाले नोड कुंजी द्वारा पढ़ते हैं। वहां क्षेत्र चुनने से लागत नहीं आती है और मॉडल के संदर्भ को छोटा रखता है:
python
def main(response: dict) -> dict:
places = (response.get("local_results") or {}).get("places") or []
rows = []
for place in places:
contact = (place.get("phone") or "").strip()
digits = sum(character.isdigit() for character in contact)
rows.append({
"name": (place.get("title") or "").strip(),
"category": (place.get("type") or "").strip(),
"rating": place.get("rating"),
"reviews": place.get("reviews") or 0,
"phone": contact if digits >= 10 else None,
"note": None if digits >= 10 else contact,
"address": (place.get("address") or "").strip(),
})
return {"rows": rows, "count": len(rows)}
# Local check against a live response. Leave everything below out of the Code node.
if __name__ == "__main__":
import json, os, urllib.request
body = json.dumps({
"actor": "scraper.google.search",
"input": {"q": "plumbers in Austin, TX", "tbm": "lcl"},
}).encode()
call = urllib.request.Request(
"https://api.scrapeless.com/api/v1/scraper/request",
data=body,
headers={"Content-Type": "application/json",
"x-api-token": os.environ["SCRAPELESS_API_KEY"]},
)
with urllib.request.urlopen(call, timeout=180) as reply:
cleaned = main(json.load(reply))
print(cleaned["count"], "rows")
print(json.dumps(cleaned["rows"][0], ensure_ascii=False))
ब्लॉक ऊपर स्थानीय जांच के रूप में डबल हो जाता है: इसे अपने कुंजी के साथ पर्यावरण में चलाएं और यह एक लाइव स्थानीय पैक लाता है, वही कार्य लागू करता है, और पहले साफ किए गए पंक्ति को प्रिंट करता है। ध्यान दें कि एक प्रत्यक्ष कॉल input को एक वस्तु के रूप में भेजता है - API एक स्ट्रिंग के साथ जवाब देती है 400 {"message":"invalid input body"}। Dify आपके लिए बाहर जाने पर स्ट्रिंग फॉर्म को परिवर्तित करता है, यही कारण है कि वही मान दोनों स्थानों पर काम करता है।
सफाई 20 कच्चे रिकॉर्ड को 20 उपयोगी में बदलती है: नाम और श्रेणियाँ बिना बेतरतीबWhitespace के, जब फ़ील्ड में एक वास्तविक संख्या होती है तो phone में, और खुलने के घंटे का पाठ note में ले जाया जाता है बजाय फोन कॉलम में लिखने के।
अमेज़न आकार के लिए वही नोड एक पंक्ति में है - return {"product": response["result"]} - और यह पेलोड का 99% छोड़ देता है।
इसे एक एजेंट या एक कार्य प्रवाह से जोड़ें
दोनों सतहें एक ही सहेजे गए उपकरण का उपयोग करती हैं, और विकल्प इस बात के बारे में है कि कौन मापदंड चुनता है।
एक एजेंट में, मॉडल यह तय करता है कि कब scraperRequest को कॉल करना है और actor और input में क्या डालना है। यह तब काम करता है जब निर्देश स्पष्ट रूप से उपकरण और डेटा स्थिति का नाम लेते हैं:
text
When a question depends on current web content, call scraperRequest with
actor "scraper.google.search" and input {"q": "<the search terms>"}, read the
organic_results, and answer from those. Do not answer from memory when the
question is about current prices, rankings, or availability.
एक कार्य प्रवाह में, आप actor को टूल नोड पर पिन करते हैं और एक ऊपर के नोड को केवल क्वेरी प्रदान करने देते हैं। चूंकि input एक स्ट्रिंग मापदंड है, विश्वसनीय पैटर्न एक कोड नोड है जो JSON पाठ बनाता है:
python
def main(query: str) -> dict:
import json
return {"payload": json.dumps({"q": query, "tbm": "lcl"})}
payload को उपकरण नोड के input फ़ील्ड में डालें। Dify की अपनी उपकरण दस्तावेज़ चारों ओर के नोड वायरिंग को अधिक गहराई में कवर करता है।
यदि आप Dify को स्वयं-होस्ट करते हैं
स्वयं-होस्टेड उदाहरण उपकरण HTTP को समर्पित ssrf_proxy कंटेनर के माध्यम से रूट करते हैं न कि API कंटेनर को सीधे इंटरनेट तक पहुंचने देते हैं। जब वह सेवा काम नहीं कर रही होती है, तो उपकरण कॉल DNS त्रुटि के साथ विफल होते हैं - [Errno -3] Temporary failure in name resolution - जो एक टूटे हुए URL की तरह पढ़ता है बजाय एक अनुपस्थित कंटेनर के। पूर्ण संग्रहण स्टैक लाते हैं, न कि केवल api और web, और वही उपकरण क्लाउड के लिए समान रूप से काम करता है।
इस गाइड में व्यवहार एक स्वयं-होस्टेड 1.16.1 उदाहरण पर मापा गया था: स्कीमा एक उपकरण में पार्स किया गया, प्रमाणीकरण परीक्षण ने 15,648 बाइट्स का SERP JSON लौटाया जिसमें Custom एक उपसर्ग के रूप में और 401 स्ट्रिंग के साथ Basic था, और सहेजे गए प्रदाता ने scraperRequest को एक संलग्न करने योग्य उपकरण के रूप में सूचीबद्ध किया।
निष्कर्ष
मार्केटप्लेस प्लगइन एक क्वेरी स्ट्रिंग को कवर करता है। एक कस्टम उपकरण इसके पीछे के अंत बिंदु को कवर करता है, जो एक लीड प्रवाह को तब चाहिए होता है जब यह स्थानीय पैक को पढ़ना शुरू करता है, उनके माध्यम से पेजिंग करता है, और वे कहीं भी जाने से पहले फ़ील्ड को साफ करता है।
सेटअप लागत एक OpenAPI फ़ाइल और चार प्रमाणीकरण फ़ील्ड है - जिनमें से दो Dify डिफ़ॉल्ट रूप से गलत भरता है। यदि इन्हें सही सेट करें, तो परिवार में हर अभिनेता कार्यक्षेत्र में हर ऐप के लिए उपलब्ध हो जाता है, एक कोड नोड के साथ जो आकार देता है जो पेलोड को छोटा और कॉलम को साफ रखता है।
क्या इसे जोड़ने के लिए तैयार हैं? एक मुफ्त Scrapeless खाता के साथ शुरू करें, अपनी API कुंजी प्राप्त करें, और ऊपर दिए गए स्कीमा को अपने कार्यक्षेत्र में कॉपी करें। उपयोग और योजना सीमाएँ Scrapeless मूल्य निर्धारण पृष्ठ पर सूचीबद्ध हैं।
प्रश्नोत्तर
प्र: क्या मुझे Deep SerpApi प्लगइन या कस्टम उपकरण का उपयोग करना चाहिए?
जब आपको केवल एक सामान्य Google क्वेरी की आवश्यकता है तो प्लगइन का उपयोग करें - यह एक उपकरण के साथ एकल query मापदंड को उजागर करता है और इसे स्थापित करने के लिए दो क्लिक लगते हैं। जब आपको स्थानीय पैक, एक पृष्ठ ऑफसेट, एक अमेज़न लिस्टिंग, या कोई अन्य अभिनेता की आवश्यकता होती है, तो कस्टम उपकरण का उपयोग करें, क्योंकि वे मापदंड उस एकल फ़ील्ड के माध्यम से पहुंच योग्य नहीं हैं।
प्र: जब वही कुंजी curl में काम करती है तो मेरा Dify कस्टम उपकरण 401 क्यों लौटाता है?
दो Dify डिफ़ॉल्ट कुंजी को एक रूप में भेजते हैं जिसे API पढ़ नहीं पाता। हेडर का नाम Authorization के रूप में डिफ़ॉल्ट होता है बजाय x-api-token के, और हेडर उपसर्ग Basic के रूप में डिफ़ॉल्ट होता है, जिससे Dify x-api-token: Basic <key> भेजता है। हेडर के नाम को x-api-token और उपसर्ग को Custom पर सेट करें।
प्र: input फ़ील्ड एक वस्तु के बजाय एक स्ट्रिंग क्यों है?
Dify ओपनAPI दस्तावेज़ को पार्स करते समय स्थितिनिर्धारित अनुरोध-शरीर के गुणों को समतल करता है, इसलिए एक स्थितिनिर्धारित वस्तु एक स्ट्रिंग मापदंड बन जाती है। Dify या तो रूप को स्वीकार करता है और अनुरोध बाहर जाने से पहले इसे सामान्यीकृत करता है, इसलिए एक कोड नोड जो json.dumps(...) का उत्सर्जन करता है, इसे एक कार्य प्रवाह में बनाने का विश्वसनीय तरीका है। अंत बिंदु को सीधी कॉल अधिक सख्त है और एक वस्तु की आवश्यकता होती है।
प्र: क्या यह Dify क्लाउड पर भी काम करता है जैसा कि स्वयं-होस्टेड?
हाँ। कस्टम उपकरण एक OpenAPI दस्तावेज़ और प्रमाणीकरण के साथ है, जिसमें कुछ भी स्थापित करने की आवश्यकता नहीं है। स्वयं-होस्टेड उदाहरणों में एक अतिरिक्त आवश्यकता होती है: ssrf_proxy कंटेनर को चालू होना चाहिए, क्योंकि उपकरण HTTP निकास इसके माध्यम से रूट किया गया है।
प्रश्न: एक अनुरोध कितने परिणाम वापस करता है?
एक वेब खोज ने इस गाइड के लिए उपयोग की गई कैप्चर में आठ ऑर्गेनिक परिणाम लौटाए, और परिणाम की संख्या प्रश्न के अनुसार भिन्न होती है। स्थानीय पैक प्रति अनुरोध 20 स्थान लौटाता है, और start: 20 अगली पृष्ठ को लाता है; एक प्रश्न के लगातार पृष्ठों में थोड़ा ओवरलैप होता है, इसलिए लेखन पर डुप्लिकेट करें।
प्रश्न: मैं अमेज़न के जवाब को मॉडल के संदर्भ में बाढ़ से कैसे बचा सकता हूँ?
कोड नोड में result का चयन करें जो टूल नोड के बाद रखा गया है। एक उत्पाद कॉल ने 2,226,755 बाइट्स लौटाए, जिनमें से 1,960,588 कच्चे html क्षेत्र थे और केवल 4,608 पार्स किए गए उत्पाद थे, इसलिए {"product": response["result"]} लौटाना सब कुछ उपयोगी रखता है और बाकी को गिराता है।
प्रश्न: क्या एक कस्टम टूल कई अभिनेताओं को कवर कर सकता है?
हाँ, और यही डिजाइन का उद्देश्य है। एंडपॉइंट actor के साथ input को लेता है, इसलिए एकल scraperRequest ऑपरेशन आपके अकाउंट के हर अभिनेता तक पहुँचता है। स्कीमा में enum में एक जोड़ने से इसे अनुरोध बिल्डर में दूसरे टूल के बिना उजागर किया जाता है।
प्रश्न: एपीआई कुंजी कहां रखनी चाहिए?
टूल प्रदाता के क्रेडेंशियल क्षेत्र में, जिसे डिफाई एक गोपनीयता के रूप में स्टोर करता है और कॉल समय पर इंजेक्ट करता है। इसे वहां बनाए रखना बजाय एक नोड पैरामीटर में इसका मतलब है कि एक निर्यातित कार्यप्रवाह या एक डुप्लिकेट ऐप इसके साथ कुंजी नहीं ले जाता है।
स्क्रैपलेस में, हम केवल सार्वजनिक रूप से उपलब्ध डेटा का उपयोग करते हैं, जबकि लागू कानूनों, विनियमों और वेबसाइट गोपनीयता नीतियों का सख्ती से अनुपालन करते हैं। इस ब्लॉग में सामग्री केवल प्रदर्शन उद्देश्यों के लिए है और इसमें कोई अवैध या उल्लंघन करने वाली गतिविधियों को शामिल नहीं किया गया है। हम इस ब्लॉग या तृतीय-पक्ष लिंक से जानकारी के उपयोग के लिए सभी देयता को कोई गारंटी नहीं देते हैं और सभी देयता का खुलासा करते हैं। किसी भी स्क्रैपिंग गतिविधियों में संलग्न होने से पहले, अपने कानूनी सलाहकार से परामर्श करें और लक्ष्य वेबसाइट की सेवा की शर्तों की समीक्षा करें या आवश्यक अनुमतियाँ प्राप्त करें।



