كيفية الحصول على مفتاح API لـ Rugcheck واستخدام Rugcheck API

Mark Ponomarev

Mark Ponomarev

4 يونيو 2025

كيفية الحصول على مفتاح API لـ Rugcheck واستخدام Rugcheck API

مشهد العملات المشفرة مليء بالفرص، ولكنه أيضًا ينطوي على مخاطر كبيرة. عمليات السحب الاحتيالي (Rug pulls) والرموز المميزة سيئة التصميم يمكن أن تؤدي إلى خسائر فادحة. يقدم Rugcheck.xyz خدمة حيوية من خلال تحليل مشاريع العملات المشفرة بحثًا عن العلامات الحمراء المحتملة. تسمح واجهة برمجة التطبيقات (API) الخاصة به للمطورين والمتداولين والمحللين بالوصول إلى هذه الرؤى برمجيًا، مما يؤدي إلى أتمتة وتوسيع نطاق جهود العناية الواجبة الخاصة بهم. سيركز هذا الدليل بشكل كبير على كيفية استخدام واجهة برمجة التطبيقات Rugcheck.xyz، وتزويدك بأمثلة عملية بلغة بايثون.

💡
هل تريد أداة رائعة لاختبار واجهات برمجة التطبيقات (API) تولد توثيق API جميلًا؟

هل تريد منصة متكاملة وشاملة لفريق المطورين الخاص بك للعمل معًا بأقصى قدر من الإنتاجية؟

يقدم Apidog جميع طلباتك، ويحل محل Postman بسعر معقول جدًا!
button

نظرة عامة موجزة عن Rugcheck.xyz وواجهة برمجة التطبيقات (API) الخاصة به

ما هو Rugcheck.xyz؟

Rugcheck.xyz هي منصة مصممة لفحص رموز العملات المشفرة والعقود الذكية بحثًا عن علامات النية الخبيثة (مثل عمليات السحب الاحتيالي أو المصائد) أو المخاطر الكامنة. تقوم بفحص كود العقد، والسيولة، واقتصاديات الرموز، ومحافظ المطورين، والمزيد، وتوفر تقييمات للمخاطر وتقارير مفصلة.

لماذا واجهة برمجة التطبيقات (API)؟

تمنح واجهة برمجة التطبيقات وصولاً برمجيًا إلى محرك التحليل الخاص بـ Rugcheck.xyz، مما يتيح:

الحصول على مفتاح واجهة برمجة التطبيقات (API) الخاص بك من Rugcheck.xyz – الأساسيات

لاستخدام واجهة برمجة التطبيقات (API)، تحتاج إلى مفتاح API. تشير وثائق واجهة برمجة التطبيقات Rugcheck.xyz (https://api.rugcheck.xyz/swagger/index.html) إلى وجود نظام حساب مستخدم لإدارة المفاتيح من خلال نقاط النهاية مثل /user/api-keys.

  1. التسجيل/تسجيل الدخول: قم بزيارة الموقع الرئيسي لـ Rugcheck.xyz وأنشئ حسابًا أو سجل الدخول.
  2. البحث عن إعدادات API: ابحث عن قسم "API" أو "Developer" (المطور) أو "API Keys" (مفاتيح API) في لوحة تحكم المستخدم الخاصة بك.
  3. إنشاء مفتاح: قم بإنشاء مفتاح API جديد. قد تتمكن من تسميته لتسهيل التعرف عليه.
  4. تأمين مفتاحك: انسخ المفتاح الذي تم إنشاؤه وقم بتخزينه بأمان (مثل مدير كلمات المرور، متغير بيئة). لا تعرضه أبدًا في مستودعات الكود العامة أو تطبيقات جانب العميل.

تتطلب جميع طلبات واجهة برمجة التطبيقات (API) إرسال هذا المفتاح في رأس الطلب X-API-KEY.

قبل الخوض في الكود، إليك بعض نقاط النهاية الأساسية التي سنتعامل معها (ارجع إلى وثائق Swagger للحصول على تفاصيل شاملة):

عنوان URL الأساسي لجميع الطلبات هو: https://api.rugcheck.xyz

كيفية استخدام واجهة برمجة التطبيقات Rugcheck.xyz: أمثلة مفصلة بلغة بايثون

هنا ننتقل إلى الجانب العملي. سنستخدم بايثون مع مكتبة requests.

المتطلبات المسبقة:

1. الإعداد ودالة استدعاء API الأساسية

أولاً، دعنا نعد بيئتنا وننشئ دالة قابلة لإعادة الاستخدام للتعامل مع استدعاءات API. أفضل ممارسة هي تخزين مفتاح API الخاص بك كمتغير بيئة.Python

import requests
import json
import os

# Load API key from environment variable for security
API_KEY = os.getenv('RUGCHECK_API_KEY')
BASE_URL = "https://api.rugcheck.xyz"

if not API_KEY:
    print("Error: RUGCHECK_API_KEY environment variable not set.")
    # You might want to exit or raise an exception here in a real application
    # For demonstration, we'll allow it to proceed but calls will fail.
    # API_KEY = "YOUR_FALLBACK_API_KEY_FOR_TESTING_ONLY" # Not recommended for actual use

HEADERS = {
    "X-API-KEY": API_KEY,
    "Accept": "application/json" # Good practice to specify accepted response type
}

def make_api_request(endpoint, params=None):
    """
    Makes a GET request to the Rugcheck.xyz API.
    
    Args:
        endpoint (str): The API endpoint path (e.g., "/utils/chains").
        params (dict, optional): Query parameters for the request.
        
    Returns:
        dict or None: The JSON response as a Python dictionary, or None if an error occurs.
    """
    if not API_KEY or API_KEY == "YOUR_FALLBACK_API_KEY_FOR_TESTING_ONLY":
        print("Error: API Key is not properly configured.")
        return None
        
    url = f"{BASE_URL}{endpoint}"
    try:
        response = requests.get(url, headers=HEADERS, params=params, timeout=30) # 30-second timeout
        response.raise_for_status()  # Raises HTTPError for bad responses (4xx or 5xx)
        return response.json()
    except requests.exceptions.HTTPError as http_err:
        print(f"HTTP error occurred: {http_err}")
        print(f"Status Code: {response.status_code}")
        try:
            # Try to print error details from API if available in JSON
            print(f"Error Response: {response.json()}")
        except json.JSONDecodeError:
            print(f"Error Response (not JSON): {response.text}")
    except requests.exceptions.ConnectionError as conn_err:
        print(f"Connection error occurred: {conn_err}")
    except requests.exceptions.Timeout as timeout_err:
        print(f"Timeout error occurred: {timeout_err}")
    except requests.exceptions.RequestException as req_err:
        print(f"An unexpected error occurred with the request: {req_err}")
    except json.JSONDecodeError: # If response.json() fails for non-HTTPError cases
        print("Failed to decode JSON response from API.")
        print(f"Response content: {response.text if 'response' in locals() else 'No response object'}")
    return None

هام: لكي تعمل الأمثلة التالية، تأكد من تعيين RUGCHECK_API_KEY في بيئتك. ستحتاج أيضًا إلى عناوين عقود وعناوين محافظ صالحة للسلاسل المعنية.

2. المثال 1: الغوص العميق في فحص الرمز (/tokens/scan/{chain}/{contractAddress})

هذه إحدى أقوى نقاط النهاية. دعنا نفحص رمزًا ونحلل الاستجابة.Python

def get_token_scan_details(chain, contract_address, include_dex=True, include_events=False):
    """
    Scans a token and prints detailed information.
    """
    print(f"\n--- Scanning Token: {contract_address} on {chain} ---")
    endpoint = f"/tokens/scan/{chain}/{contract_address}"
    params = {
        "includeDexScreenerData": str(include_dex).lower(), # API expects string "true" or "false"
        "includeSignificantEvents": str(include_events).lower()
    }
    
    data = make_api_request(endpoint, params=params)
    
    if data:
        print(f"Scan ID: {data.get('id')}")
        print(f"Risk Level: {data.get('riskLevel')}")
        
        trust_score_data = data.get('trustScore', {})
        print(f"Trust Score: {trust_score_data.get('value')} ({trust_score_data.get('rating')})")

        print("\nScams Found:")
        scams = data.get('scams', [])
        if scams:
            for scam in scams:
                print(f"  - Type: {scam.get('type')}, Severity: {scam.get('severity')}, Message: {scam.get('message')}")
        else:
            print("  No specific scam indicators found by this scan.")

        print("\nWarnings:")
        warnings = data.get('warnings', [])
        if warnings:
            for warning in warnings:
                print(f"  - Type: {warning.get('type')}, Severity: {warning.get('severity')}, Message: {warning.get('message')}")
        else:
            print("  No warnings found by this scan.")

        contract_details = data.get('contractDetails', {})
        print("\nContract Details:")
        print(f"  Name: {contract_details.get('name')}")
        print(f"  Symbol: {contract_details.get('symbol')}")
        print(f"  Decimals: {contract_details.get('decimals')}")
        print(f"  Owner: {contract_details.get('ownerAddress')}")
        print(f"  Creator: {contract_details.get('creatorAddress')}")
        print(f"  Verified: {contract_details.get('isVerified')}")
        if contract_details.get('isProxy'):
            print(f"  Proxy Implementation: {contract_details.get('proxyImplementationAddress')}")
        
        taxes = data.get('taxes', {})
        print("\nTaxes:")
        print(f"  Buy Tax: {taxes.get('buyTax')}%")
        print(f"  Sell Tax: {taxes.get('sellTax')}%")
        print(f"  Transfer Tax: {taxes.get('transferTax')}%")
        if taxes.get('isBuyTaxModifiable') or taxes.get('isSellTaxModifiable') or taxes.get('isTransferTaxModifiable'):
            print("  Warning: One or more taxes may be modifiable.")

        liquidity = data.get('liquidityDetails', {})
        print("\nLiquidity Details:")
        if liquidity.get('dexes'):
            for dex in liquidity['dexes']:
                print(f"  DEX: {dex.get('name')} ({dex.get('pairAddress')})")
                print(f"    Liquidity: {dex.get('liquidityAmountInUsd')} USD")
                print(f"    Total LP Supply: {dex.get('totalSupply')}")
                if dex.get('locks'):
                    for lock in dex['locks']:
                        print(f"      Lock: Amount {lock.get('amountLocked')} until {lock.get('unlockDate')}, Vendor: {lock.get('vendorName')}")
                else:
                    print("      No explicit LP locks found for this DEX.")
        else:
            print("  No DEX liquidity information found.")
            
        holder_analysis = data.get('holderAnalysis', {})
        print("\nHolder Analysis:")
        print(f"  Holder Count: {holder_analysis.get('holderCount')}")
        if holder_analysis.get('topHolders'):
            print("  Top Holders:")
            for i, holder in enumerate(holder_analysis['topHolders'][:3]): # Display top 3 for brevity
                print(f"    {i+1}. Address: {holder.get('address')}, Balance: {holder.get('balance')}, % Supply: {holder.get('percentage')}%")
        
        if include_dex and 'dexScreenerData' in data and data['dexScreenerData']:
            dex_data = data['dexScreenerData']
            print("\nDEX Screener Data:")
            print(f"  Price (USD): {dex_data.get('priceUsd')}")
            print(f"  FDV (USD): {dex_data.get('fdv')}")
            print(f"  Volume (24h USD): {dex_data.get('volume', {}).get('h24')}")
            # Add more fields as needed
            
        # You can similarly process 'significantEvents' if include_events was True
        # print(json.dumps(data, indent=2)) # To print the full raw response for exploration
    else:
        print("Failed to retrieve token scan details.")

# --- Usage Example for Token Scan ---
# Replace with a valid contract address and chain from the supported list (e.g., 'bsc', 'ethereum')
# For BSC (BEP-20 tokens): e.g., WBNB contract "0xbb4CdB9CBd36B01bD1cBaEBF2De08d9173bc095c"
# For Ethereum (ERC-20 tokens): e.g., USDC contract "0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48"
# test_chain = "bsc"
# test_contract = "0xbb4CdB9CBd36B01bD1cBaEBF2De08d9173bc095c" # WBNB on BSC (example)
# get_token_scan_details(test_chain, test_contract, include_dex=True)

تفسير نتائج الفحص:

3. المثال 2: استرداد الكود المصدري (/tokens/source-code/{chain}/{contractAddress})

معرفة ما إذا كان العقد موثقًا والقدرة على فحص الكود المصدري الخاص به أمر حيوي.Python

def get_token_source_code(chain, contract_address):
    """
    Retrieves and displays information about a token's source code.
    """
    print(f"\n--- Retrieving Source Code for: {contract_address} on {chain} ---")
    endpoint = f"/tokens/source-code/{chain}/{contract_address}"
    
    data = make_api_request(endpoint)
    
    if data:
        print(f"Contract Name: {data.get('contractName')}")
        print(f"Is Verified: {data.get('isVerified')}")
        
        if data.get('isVerified'):
            # The ABI can be very long, so just print a snippet or its presence
            print(f"ABI: {'Present' if data.get('abi') else 'Not available'}") 
            
            source_code = data.get('sourceCode')
            if isinstance(source_code, str):
                print(f"Source Code Snippet (first 500 chars):\n{source_code[:500]}...")
                # In a real app, you might save this to a file:
                # with open(f"{contract_address}_source.sol", "w") as f:
                # f.write(source_code)
                # print(f"Full source code saved to {contract_address}_source.sol")
            elif isinstance(source_code, dict): # For multi-file sources
                print("Source Code (multiple files):")
                for filename, content in source_code.items():
                    print(f"  File: {filename}, Snippet (first 200 chars): {content.get('content', '')[:200]}...")
            else:
                print("Source Code: Not available or unexpected format.")
        else:
            print("Contract source code is not verified or not available.")
    else:
        print("Failed to retrieve source code information.")

# --- Usage Example for Source Code ---
# test_chain_eth = "ethereum"
# usdc_contract_eth = "0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48" # USDC on Ethereum (verified)
# get_token_source_code(test_chain_eth, usdc_contract_eth)

4. المثال 3: تقييم مخاطر المحفظة (/wallets/risk-rating/{chain}/{walletAddress})

يمكن أن يكشف تحليل المحافظ المرتبطة بمشروع (مثل محافظ الناشر، محافظ الفريق) عن المخاطر.Python

def get_wallet_risk_rating(chain, wallet_address):
    """
    Retrieves and displays the risk rating for a wallet.
    """
    print(f"\n--- Getting Risk Rating for Wallet: {wallet_address} on {chain} ---")
    endpoint = f"/wallets/risk-rating/{chain}/{wallet_address}"
    
    data = make_api_request(endpoint)
    
    if data:
        print(f"Overall Wallet Risk Level: {data.get('riskLevel')}")
        print(f"Summary: {data.get('summary')}")
        
        print("\nAssociated Tokens with Risk:")
        associated_tokens = data.get('associatedTokens', [])
        if associated_tokens:
            for token_info in associated_tokens:
                print(f"  - Token: {token_info.get('symbol')} ({token_info.get('contractAddress')})")
                print(f"    Chain: {token_info.get('chain')}")
                print(f"    Risk Level: {token_info.get('riskLevel')}")
                print(f"    Role: {token_info.get('roleInTokenContext')} (e.g., Deployer, Owner)")
        else:
            print("  No associated tokens with notable risk found linked to this wallet by the scan.")
            
        # Other fields like 'activitySummary', 'knownAssociations' could also be parsed.
        # print(json.dumps(data, indent=2)) # For full response
    else:
        print("Failed to retrieve wallet risk rating.")

# --- Usage Example for Wallet Risk Rating ---
# Replace with a real wallet address and chain
# Example: A deployer wallet address you are investigating
# test_wallet_chain = "bsc"
# test_wallet_address = "0x000000000000000000000000000000000000dead" # Example, use a real one
# get_wallet_risk_rating(test_wallet_chain, test_wallet_address)

5. المثال 4: البحث عن الرموز (/tokens/search)

إذا كان لديك اسم الرمز أو رمزه فقط، يمكنك محاولة العثور على عنوان العقد الخاص به.Python

def search_for_token(query, chain=None, page_size=5):
    """
    Searches for tokens and displays results.
    """
    print(f"\n--- Searching for tokens with query: '{query}' ---")
    endpoint = "/tokens/search"
    params = {
        "query": query,
        "pageSize": page_size
    }
    if chain:
        params["chain"] = chain
        print(f"Filtering by chain: {chain}")
        
    data = make_api_request(endpoint, params=params)
    
    if data and 'items' in data:
        tokens_found = data['items']
        print(f"Found {len(tokens_found)} token(s) (showing up to {page_size}):")
        if tokens_found:
            for token in tokens_found:
                print(f"  Name: {token.get('name')} ({token.get('symbol')})")
                print(f"    Contract: {token.get('contractAddress')}")
                print(f"    Chain: {token.get('chain')}")
                print(f"    Risk Level: {token.get('riskLevel')}")
                print(f"    DEX Screener Link: {token.get('dexScreenerLink')}")
                print("-" * 20)
        else:
            print("No tokens found matching your query.")
        
        # Pagination details are also available if you want to implement full pagination
        # print(f"Total Items: {data.get('totalItems')}, Page: {data.get('pageNumber')}, Total Pages: {data.get('totalPages')}")
    else:
        print("Failed to perform token search or no items found.")

# --- Usage Example for Token Search ---
# search_for_token("CAKE", chain="bsc")
# search_for_token("Shiba Inu") # Broad search across chains

6. المثال 5: سرد السلاسل المدعومة (/utils/chains)

استدعاء أداة بسيط للحصول على قائمة بالسلاسل التي تدعمها واجهة برمجة التطبيقات. يمكن أن يكون هذا مفيدًا للتحقق من صحة إدخال المستخدم أو ملء القوائم المنسدلة في تطبيق ما.Python

def list_supported_chains():
    """
    Lists all chains supported by the Rugcheck.xyz API.
    """
    print("\n--- Supported Blockchains by Rugcheck.xyz API ---")
    endpoint = "/utils/chains"
    data = make_api_request(endpoint)
    
    if data:
        for chain_info in data:
            print(f"  ID: {chain_info.get('id'):<15} Name: {chain_info.get('name'):<20} Native: {chain_info.get('nativeCurrencySymbol')}")
    else:
        print("Failed to retrieve supported chains.")

# --- Usage Example for Listing Chains ---
# list_supported_chains()

تشغيل الأمثلة:

  1. احفظ الكود كملف بايثون (على سبيل المثال، rugcheck_user.py).
  2. عيّن مفتاح API الخاص بك: export RUGCHECK_API_KEY="YOUR_ACTUAL_API_KEY" (على Linux/macOS) أو عيّنه في متغيرات البيئة لنظامك (Windows).
  3. قم بإلغاء التعليق عن أسطر مثال الاستخدام في نهاية كل كتلة دالة تريد اختبارها.
  4. شغّل من الطرفية الخاصة بك: python rugcheck_user.py

الجزء الخامس: أفضل الممارسات والنصائح المتقدمة

الخلاصة

توفر واجهة برمجة التطبيقات Rugcheck.xyz طريقة قوية ومفصلة لتقييم المخاطر المرتبطة بمشاريع العملات المشفرة برمجيًا. من خلال إتقان استخدامها عبر البرمجة العملية، كما هو موضح في هذا الدليل، يمكنك تعزيز عملية العناية الواجبة بشكل كبير، وبناء أنظمة تداول آلية أكثر أمانًا، والمساهمة في نظام DeFi بيئي أكثر شفافية. تذكر دائمًا استخدام مثل هذه الأدوات بمسؤولية وبالتزامن مع البحث الشامل. تكمن قوة واجهة برمجة التطبيقات في قدرتك على استعلام البيانات التي توفرها وتحليلها وتفسيرها بفعالية.

💡
هل تريد أداة رائعة لاختبار واجهات برمجة التطبيقات (API) تولد توثيق API جميلًا؟

هل تريد منصة متكاملة وشاملة لفريق المطورين الخاص بك للعمل معًا بأقصى قدر من الإنتاجية؟

يقدم Apidog جميع طلباتك، ويحل محل Postman بسعر معقول جدًا!
button

ممارسة تصميم API في Apidog

اكتشف طريقة أسهل لبناء واستخدام واجهات برمجة التطبيقات