Sürüm
14.0.0
Python istemci kitaplığı yeni bir gerekli yapılandırma parametresini kullanıma sunuyor
kitaplığın döndürülmesini isteyip istemediğinizi belirten use_proto_plus
adlı
proto-plus mesajları veya
protobuf mesajları. Ayrıntılı bilgi için
Bu parametrenin nasıl ayarlanacağını öğrenmek için yapılandırma belgelerine bakın.
Bu bölümde, hangi türde anahtar kelimelerin kullanılacağını seçmenin performans üzerindeki
kullanmanızı öneririz. Bu nedenle,
elinizdeki seçeneklere göre hareket eder. Ancak isterseniz
kod değişikliği yapmadan 14.0.0
sürümüne yükseltmeniz gerekiyorsa,
Arayüz değişikliklerinin zarar görmesini önlemek için use_proto_plus
değerini True
olarak ayarlayın.
Proto-plus ile protobuf mesajlarının karşılaştırması
10.0.0
sürümünde Python istemci kitaplığı yeni bir kod oluşturma aracına taşındı
entegre edilemeyen ardışık düzen
bir yöntem olarak proto-plus
daha iyi davranmalarını sağlayarak protobuf mesaj arayüzünün ergonomisini ve daha iyi
nesneleri tanımlamak için de kullanabilirsiniz. Bu iyileştirmenin telafisi,
performans artışı yaratır.
Proto-plus performansı
Protoplus'ın temel avantajlarından biri, protobuf dönüşümünü mesaj ve iyi bilinen türleri type" (tür) adlı bir işlemle yerel Python kullanır hariç tutma.
Sıralandırma, bir proto-artı mesaj örneğinde bir alana erişildiğinde gerçekleşir. özellikle de bir alan okunduğunda veya ayarlandığında (ör. bir protobuf dosyası) tanım:
syntax = "proto3";
message Dog {
string name = 1;
}
Bu tanım proto-artı bir sınıfa dönüştürüldüğünde, aşağıdaki gibidir:
import proto
class Dog(proto.Message):
name = proto.Field(proto.STRING, number=1)
Ardından Dog
sınıfını başlatabilir ve name
alanına istediğiniz gibi erişebilirsiniz.
herhangi başka bir Python nesnesi:
dog = Dog()
dog.name = "Scruffy"
print(dog.name)
name
alanı okunurken ve ayarlanırken değer, yerel bir değerden dönüştürülür
Python str
türünde bir string
türüne
Protobuf çalışma zamanıyla uyumlu olduğundan emin olun.
10.0.0
sürümünün yayınlanmasından bu yana gerçekleştirdiğimiz analizlerde
bu tür dönüşümleri gerçekleştirmek için harcanan zamanın, 2008'de gerçekleştirilen
kullanıcılara protobuf kullanma seçeneği sunmanın önemli olduğunu, bunun performans üzerindeki
mesaj.
Proto-plus ve protobuf mesajları için kullanım örnekleri
- Proto-plus mesaj kullanım alanları
- Proto-plus, protobuf mesajlarına kıyasla bazı ergonomik iyileştirmeler sunar. bu nedenle okunabilir ve okunabilir kod yazmak için idealdir. Kullanıcıların daha kolay kullanılır ve daha kolay anlaşılır.
- Protobuf mesajlarının kullanım alanları
- Özellikle uygulamalarda, performans açısından hassas kullanım alanları için protobuf'ları kullanın
büyük raporları hızlı bir şekilde işlemesi gereken veya
çok sayıda işlem (örneğin,
BatchJobService
veyaOfflineUserDataJobService
.
Mesaj türlerini dinamik olarak değiştirme
Uygulamanız için uygun mesaj türünü seçtikten sonra
diğer türü kullanmanız gerekir. Bu örnekte
Google Cloud Platform'un sunduğu yardımcı programları kullanarak iki tür arasında kolayca geçiş yapabilirsiniz.
kullanabilirsiniz. Yukarıdaki Dog
ileti sınıfının aynısı kullanılıyor:
from google.ads.googleads import util
# Proto-plus message type
dog = Dog()
# Protobuf message type
dog = util.convert_proto_plus_to_protobuf(dog)
# Back to proto-plus message type
dog = util.convert_protobuf_to_proto_plus(dog)
Protobuf mesaj arayüzü farklılıkları
Proto-plus arayüzü, ayrıntılı bir şekilde ele alacağız, ancak burada Google Ads müşterisinin yaygın kullanım alanlarını etkileyen bazı temel farklılıklar kitaplığını açar.
Bayt serileştirme
- Proto-plus mesajları
serialized = type(campaign).serialize(campaign) deserialized = type(campaign).deserialize(serialized)
- Protobuf mesajları
serialized = campaign.SerializeToString() deserialized = campaign.FromString(serialized)
JSON serileştirme
- Proto-plus mesajları
serialized = type(campaign).to_json(campaign) deserialized = type(campaign).from_json(serialized)
- Protobuf mesajları
from google.protobuf.json_format import MessageToJson, Parse serialized = MessageToJson(campaign) deserialized = Parse(serialized, campaign)
Alan maskeleri
Alan maskesi yardımcı yöntemi, api-core, protobuf protokolü kullanacak şekilde tasarlanmıştır mesaj örneklerini anlatacağım. Proto-plus mesajları kullanırken bunları protobuf'a dönüştürün. mesajlarını gözden geçirin:
- Proto-plus mesajları
from google.api_core.protobuf_helpers import field_mask campaign = client.get_type("Campaign") protobuf_campaign = util.convert_proto_plus_to_protobuf(campaign) mask = field_mask(None, protobuf_campaign)
- Protobuf mesajları
from google.api_core.protobuf_helpers import field_mask campaign = client.get_type("Campaign") mask = field_mask(None, campaign)
Sıralamalar
Proto-plus mesajları tarafından gösterilen sıralamalar, Python'un yerel örneğidir
enum
türü ve dolayısıyla
bir dizi kolaylık yöntemi kullanabilir.
Enum türü alımı
Sıralamaları almak için GoogleAdsClient.get_type
yöntemi kullanılırken iletiler
satın alma durumunuza bağlı olarak, döndürülen
proto-plus veya protobuf mesajlarıdır. Örneğin:
- Proto-plus mesajları
val = client.get_type("CampaignStatusEnum").CampaignStatus.PAUSED
- Protobuf mesajları
val = client.get_type("CampaignStatusEnum").PAUSED
Sıralamaları daha basit hale getirmek için
Hangisinden bağımsız olarak tutarlı bir arayüze sahip GoogleAdsClient
örnek
kullandığınız mesaj türü:
val = client.enums.CampaignStatusEnum.PAUSED
Sıralama değeri alımı
Bazen belirli bir sıralamanın değerini veya alan kimliğini bilmek,
örnek, CampaignStatusEnum
üzerindeki PAUSED
değeri 3
değerine karşılık gelir:
- Proto-plus mesajları
campaign = client.get_type("Campaign") campaign.status = client.enums.CampaignStatusEnum.PAUSED # To read the value of campaign status print(campaign.status.value)
- Protobuf mesajları
campaign = client.get_type("Campaign") status_enum = client.enums.CampaignStatusEnum campaign.status = status_enum.PAUSED # To read the value of campaign status print(status_enum.CampaignStatus.Value(campaign.status))
Sıralama adı alma
Bazen bir numaralandırma alanının adını bilmek yararlı olur. Örneğin,
nesneleri okumanın hangi kampanya durumunu
etkili olduğunu bilmek isteyebilirsiniz.
int 3
karşılık gelir:
- Proto-plus mesajları
campaign = client.get_type("Campaign") campaign.status = client.enums.CampaignStatusEnum.PAUSED # To read the name of campaign status print(campaign.status.name)
- Protobuf mesajları
campaign = client.get_type("Campaign") status_enum = client.enums.CampaignStatusEnum # Sets the campaign status to the int value for PAUSED campaign.status = status_enum.PAUSED # To read the name of campaign status status_enum.CampaignStatus.Name(campaign.status)
Yinelenen alanlar
Proto-plus'ta açıklandığı gibi
dokümanlar için tıklayın.
yinelenen alanlar genellikle yazılan listelere eşdeğerdir; diğer bir deyişle,
list
ile neredeyse aynı şekilde davranır.
Tekrarlanan skaler alanlara ekleme
Tekrarlanan skalerlere değer eklerken
type alanlarının her biri
string
veya int64
alanlarında arayüz, mesaj ne olursa olsun aynı
tür:
- Proto-plus mesajları
ad.final_urls.append("https://www.example.com")
- Protobuf mesajları
ad.final_urls.append("https://www.example.com")
Buna, diğer tüm yaygın list
yöntemleri de dahildir (örneğin, extend
):
- Proto-plus mesajları
ad.final_urls.extend(["https://www.example.com", "https://www.example.com/2"])
- Protobuf mesajları
ad.final_urls.extend(["https://www.example.com", "https://www.example.com/2"])
Yinelenen alanlara mesaj türleri ekleme
Tekrarlanan alan skaler değilse türü, bu anahtar kelimelerin yinelenen alanlar biraz farklıdır:
- Proto-plus mesajları
frequency_cap = client.get_type("FrequencyCapEntry") frequency_cap.cap = 100 campaign.frequency_caps.append(frequency_cap)
- Protobuf mesajları
# The add method initializes a message and adds it to the repeated field frequency_cap = campaign.frequency_caps.add() frequency_cap.cap = 100
Yinelenen alanları atama
Hem skaler hem de skaler olmayan tekrarlanan alanlar için, farklı şekillerde kullanabilirsiniz:
- Proto-plus mesajları
# In proto-plus it's possible to use assignment. urls = ["https://www.example.com"] ad.final_urls = urls
- Protobuf mesajları
# Protobuf messages do not allow assignment, but you can replace the # existing list using slice syntax. urls = ["https://www.example.com"] ad.final_urls[:] = urls
Boş mesajlar
Bazen bir mesaj örneğinin herhangi bir ya da herhangi bir alanın ayarlanmış olması gerekir.
- Proto-plus mesajları
# When using proto-plus messages you can simply check the message for # truthiness. is_empty = bool(campaign) is_empty = not campaign
- Protobuf mesajları
is_empty = campaign.ByteSize() == 0
Mesaj kopyası
Hem proto-plus hem de protobuf mesajları için copy_from
kullanmanızı öneririz.
yardımcı yöntem (GoogleAdsClient
):
client.copy_from(campaign, other_campaign)
Boş mesaj alanları
Boş mesaj alanlarını ayarlama işlemi, mesaj türü olarak kullanabilirsiniz. Alana boş bir mesaj kopyalamanız yeterlidir söz konusu olabilir. İleti kopyası ve Boş İleti Alanlar rehberini inceleyin. Medya etkinliği ölçüm araçlarının değerini ayarlamak için:
client.copy_from(campaign.manual_cpm, client.get_type("ManualCpm"))
Ayrılmış kelimeler olan alan adları
Proto-plus mesajları kullanılırken alan adları otomatik olarak bir
Ad Python'da ayrılmış bir kelimeyse sondaki alt çizgiyi ekleyin. Bir
Asset
örneğiyle çalışma örneği:
asset = client.get_type("Asset")
asset.type_ = client.enums.AssetTypeEnum.IMAGE
Ayırtılmış rezervasyonların tam listesi adlar her bir tablodaki gapic oluşturma aracı modülünü kullanabilirsiniz. Bu, programlı olarak da erişilebilir.
İlk olarak modülü yükleyin:
python -m pip install gapic-generator
Ardından, bir Python REPL veya komut dosyası içinde:
import gapic.utils
print(gapic.utils.reserved_names.RESERVED_NAMES)
Alan varlığı
Protobuf mesaj örneklerindeki alanlar varsayılan değerlere sahip olduğundan alanın ayarlanıp ayarlanmadığı her zaman sezgiseldir.
- Proto-plus mesajları
# Use the "in" operator. has_field = "name" in campaign
- Protobuf mesajları
campaign = client.get_type("Campaign") # Determines whether "name" is set and not just an empty string. campaign.HasField("name")
Protobuf
Message
sınıf arayüzünde, alanın bir kontroldeki alanınHasField
ayarlanmış olsa bile varsayılan değere göre ayarlanmış tüm mesajdır.
Protobuf mesaj yöntemleri
Protobuf mesajı arayüzü, proto-plus arayüzünün bir parçasını; ancak bunları kullanarak proto-plus mesajını protobuf karşılığına dönüştürmek için:
# Accessing the ListFields method
protobuf_campaign = util.convert_protobuf_to_proto_plus(campaign)
print(campaign.ListFields())
# Accessing the Clear method
protobuf_campaign = util.convert_protobuf_to_proto_plus(campaign)
print(campaign.Clear())
Sorun izleyici
Bu değişiklikler veya
14.0.0
sürümünü kullanıyorsanız bir
sorun
takip eder.