İçeriğe geç
Twexapi
Türkçe
Esc
gezin⌘Jönizle
Bu sayfada

Google ADK

TwexAPI MCP aracılığıyla tweet araması, profiller, trendler ve incelenen X yazıları için Gemini ADK aracıları oluşturun.

TwexAPI’nin MCP sunucusu aracılığıyla bir Google ADK Twitter API aracısı oluşturun. Tweet’leri arayın, profilleri inceleyin, eğilimleri okuyun ve yazma işlemlerini inceleyin. Tweet kimliklerini, imleçleri ve rota adlarını dayanıklı JSON olarak koruyun.

Neden Google ADK’yı TwexAPI ile kullanmalısınız?

ADK, Gemini’nin ilkidir. TwexAPI uzak bir MCP araç seti olarak görünür: ‘explore’ rotaları keşfeder, twexapi_request onları yürütür.

Temsilci görevi TwexAPI rotası Bir sonraki adım için saklayın
Tweet’lerde ara POST /twitter/advanced_search/page Sorgu, tweet kimlikleri, yazarlar, “created_at”, imleç
Bir profili inceleme GET /twitter/{screen_name}/about Kullanıcı kimliği, kullanıcı adı, biyografi, takipçi sayısı
Trendleri okuyun GET /twitter/global-trending/tweets Ülke, konu, tweet satırları
Gönder veya yanıtla POST /twitter/tweets/create Tweet kimliği, rota, insan onayı, çerez onayı

Çalışma zamanı Gemini olduğunda ADK’yı kullanın. Model gerektirmeyen zamanlanmış işler için Python SDK veya Prefect kullanın.

Önkoşullar

  • Python 3.10 veya üzeri
  • Bir TwexAPI API anahtarı
  • Bir Google AI API anahtarı Public docs focus on API-key reads.

Genel X okumalarının X Developer kimlik bilgilerine ihtiyacı yoktur. TwexAPI ile kimlik doğrulaması yapın.

Kurulum

python -m pip install "google-adk>=1.0" python-dotenv
TWEXAPI_API_KEY=YOUR_API_KEY
GOOGLE_API_KEY=...

TwexAPI MCP’ye bağlanın

import os

from google.adk.tools.mcp_tool import McpToolset, StreamableHTTPConnectionParams

twexapi_toolset = McpToolset(
    connection_params=StreamableHTTPConnectionParams(
        url="https://api.twexapi.io/mcp",
        headers={"x-api-key": os.environ["TWEXAPI_API_KEY"]},
    )
)

Kimliği doğrulanmamış MCP istekleri 401 döndürür. İlk istekte x-api-key gönderin.

Tam örnek

import asyncio
import os
from pathlib import Path
from typing import Literal

from dotenv import load_dotenv
from google.adk.agents import LlmAgent
from google.adk.runners import InMemoryRunner
from google.adk.tools.mcp_tool import McpToolset, StreamableHTTPConnectionParams
from google.genai import types
from pydantic import BaseModel


class TweetRow(BaseModel):
    tweet_id: str
    text: str
    author_username: str | None = None
    created_at: str | None = None


class TweetSearchHandoff(BaseModel):
    query: str
    route_used: str
    tweets: list[TweetRow]
    has_more: bool
    next_cursor: str | None = None
    stop_reason: Literal[
        "complete",
        "requested_limit",
        "cursor_stalled",
        "page_cap",
    ]


async def main() -> None:
    load_dotenv()

    twexapi_toolset = McpToolset(
        connection_params=StreamableHTTPConnectionParams(
            url="https://api.twexapi.io/mcp",
            headers={"x-api-key": os.environ["TWEXAPI_API_KEY"]},
        )
    )

    agent = LlmAgent(
        model="gemini-2.5-flash",
        name="twexapi_agent",
        instruction=(
            "Use TwexAPI for Twitter API requests. Call explore before twexapi_request. "
            "Preserve exact IDs and cursors. Never invent missing tweet fields. "
            "Ask for confirmation before read_only: false actions. "
            "Return only valid JSON for TweetSearchHandoff."
        ),
        tools=[twexapi_toolset],
    )

    runner = InMemoryRunner(agent=agent, app_name="twexapi_app")
    session = await runner.session_service.create_session(
        app_name="twexapi_app",
        user_id="user-1",
    )

    response_parts: list[str] = []
    async for event in runner.run_async(
        user_id="user-1",
        session_id=session.id,
        new_message=types.Content(
            role="user",
            parts=[
                types.Part(
                    text=(
                        "Search 25 recent tweets about Google ADK MCP. "
                        "Return query, route_used, tweet rows, has_more, "
                        "next_cursor, and stop_reason as JSON."
                    )
                )
            ],
        ),
    ):
        if event.content and event.content.parts:
            response_parts.extend(
                part.text for part in event.content.parts if part.text
            )

    handoff = TweetSearchHandoff.model_validate_json("".join(response_parts))
    Path("twexapi-adk-handoff.json").write_text(
        handoff.model_dump_json(indent=2),
        encoding="utf-8",
    )
    await twexapi_toolset.close()


asyncio.run(main())

Model JSON’u Markdown fence içine alırsa, model_validate_json öncesinde kaldırın. Dosyayı ADK oturumunun dışında kalıcı hale getirin.

MCP yanıt sözleşmesini koruyun

Her sayfada aynı sorgu ve filtreleri yeniden kullanın. Her imleci opak kabul edin.

İstenen toplam karşılandığında, has_more false olduğunda, next_cursor tekrarlandığında veya sayfa sınırına ulaşıldığında sayfalandırmayı durdurun.

Devam ettirilebilir agent devrini sürdürün

Tweet sayfaları

tweet_id, text, author_username, created_at, has_more, next_cursor ve orijinal sorguyu saklayın.

Profil satırları

user_id, username, name, description ve takipçi sayılarını saklayın.

Trend satırları

Ülke, konu, içerik etiketi ve tweet kimliklerini saklayın.

Yazma işlemleri

Rotayı, önizleme metnini ve onayı saklayın. Çerezleri gizli bir depoda tutun. Bkz..

Bkz. Agent MCP Handoff.

Hata işleme oluşturun

Durum Anlam Agent kararı
400 Geçersiz rota veya parametreler Yeniden denemeden önce isteği düzeltin
401 Eksik veya geçersiz API anahtarı Durdurun ve kimlik bilgisini değiştirin
403 Erişim reddedildi veya kredi Yazmaları duraklatın; Get Balance kontrol edin
429 Hız sınırına ulaşıldı Geri çekilin, ardından aynı imleçle devam edin
5xx Geçici sunucu hatası Güvenli okumalara sınırlı geri çekilme uygulayın

Bkz. Error Handling ve Rate Limits.

Çoklu agent kurulumu

TwexAPI araçlarını yalnızca toplayıcıya verin. Analiz ve yazma agent’larını araçsız tutun; böylece yazma onayları açık kalır.

researcher = LlmAgent(
    model="gemini-2.5-flash",
    name="researcher",
    instruction="Collect X/Twitter data through TwexAPI MCP and return compact JSON.",
    tools=[twexapi_toolset],
)

analyst = LlmAgent(
    model="gemini-2.5-flash",
    name="analyst",
    instruction="Analyze structured tweet rows. Do not call external tools.",
)

Dinamik başlıklar ve araç filtreleme

Bir ADK uygulaması birden fazla TwexAPI hesabına hizmet verdiğinde dinamik başlıklar kullanın.

def get_headers(context):
    return {"x-api-key": context.state["twexapi_api_key"]}


twexapi_toolset = McpToolset(
    connection_params=StreamableHTTPConnectionParams(
        url="https://api.twexapi.io/mcp",
    ),
    header_provider=get_headers,
)

Planlama agent’larına yalnızca keşfi açın:

planning_toolset = McpToolset(
    connection_params=StreamableHTTPConnectionParams(
        url="https://api.twexapi.io/mcp",
        headers={"x-api-key": os.environ["TWEXAPI_API_KEY"]},
    ),
    tool_filter=["explore"],
)

Paket versiyonları

Paket Desteklenen aralık
Python >=3.10
google-adk >=1.0
pydantic >=2.7

Sonraki adımlar

Bu sayfa yardımcı oldu mu?