search_stream yöntemi, SearchGoogleAdsStreamResponse nesnelerinin yineleyicisini döndürür.
Bu kod örneğinde gösterildiği gibi, her yanıttaki results alanında her bir GoogleAdsRow için yineleme yapabilirsiniz.
def main(client: GoogleAdsClient, customer_id: str) -> None: ga_service: GoogleAdsServiceClient = client.get_service("GoogleAdsService") query: str = """ SELECT campaign.id, campaign.name FROM campaign ORDER BY campaign.id""" # Issues a search request using streaming. stream: Iterator[SearchGoogleAdsStreamResponse] = ga_service.search_stream( customer_id=customer_id, query=query ) for batch in stream: rows: List[GoogleAdsRow] = batch.results for row in rows: print( f"Campaign with ID {row.campaign.id} and name " f'"{row.campaign.name}" was found.' )
Her GoogleAdsRow yapısı, Google Ads sorgu dilinde (GAQL) sorgunuzda seçtiğiniz alanlar tarafından belirlenir. Yanıt yapısı hakkında daha fazla bilgi için Google Ads Sorgu Dili konusuna bakın.
Arama yaparken
GoogleAdsService.search_stream,
akış yanıtı yineleyicisi döndürülür. Bu yineleyici, bozuk akışları veya segmentasyon hatalarını önlemek için kullanılırken GoogleAdsService istemcisiyle aynı kapsamda kalmalıdır. Bunun nedeni, açık GoogleAdsService nesnesi kapsam dışına çıktığında gRPC Channel nesnesinin çöp toplama işlemine tabi tutulmasıdır.
GoogleAdsService nesnesi, search_stream sonucu üzerinde yineleme gerçekleştiğinde artık kapsamda değilse Channel nesnesi zaten yok edilmiş olabilir. Bu durumda, yineleyici bir sonraki değeri almaya çalıştığında tanımlanmamış davranışa neden olur.
Aşağıdaki kodda, akış yineleyicilerinin yanlış kullanımı gösterilmektedir:
def stream_response(client, customer_id, query):
return client.get_service("GoogleAdsService", version="v24").search_stream(customer_id, query=query)
def main(client, customer_id):
query = "SELECT campaign.name FROM campaign LIMIT 10"
response = stream_response(client, customer_id, query=query)
# Access the iterator in a different scope from where the service object was created.
try:
for batch in response:
# Iterate through response, expect undefined behavior.
Bu kodda, GoogleAdsService nesnesi, yineleyicinin erişildiği kapsamdan farklı bir kapsamda oluşturulur. Sonuç olarak, yineleyici yanıtın tamamını kullanmadan önce Channel nesnesi yok edilebilir.
Bunun yerine, akış yineleyici, kullanıldığı sürece GoogleAdsService istemcisiyle aynı kapsamda kalmalıdır:
def main(client, customer_id):
ga_service = client.get_service("GoogleAdsService", version="v24")
query = "SELECT campaign.name FROM campaign LIMIT 10"
response = ga_service.search_stream(customer_id=customer_id, query=query)
# Access the iterator in the same scope as where the service object was created.
try:
for batch in response:
# Successfully iterate through response.