खाली मैसेज ऑब्जेक्ट को फ़ील्ड के तौर पर सेट करना

Google Ads API में, मैसेज के कुछ फ़ील्ड खाली मैसेज ऑब्जेक्ट के तौर पर दिखाए जाते हैं, जैसे कि campaign.manual_cpm. इसके अलावा, इनमें सिर्फ़ वे वैकल्पिक फ़ील्ड हो सकते हैं जिन्हें सेट करने की ज़रूरत नहीं होती, जैसे कि campaign.manual_cpc. इन फ़ील्ड को सेट करके, एपीआई को यह बताना ज़रूरी होता है कि दिए गए कैंपेन के लिए किस बिडिंग की रणनीति का इस्तेमाल करना है. हालांकि, मैसेज खाली होने पर काम करना आसान नहीं होता.

campaign.name फ़ील्ड को अपडेट करते समय, जो कि एक स्ट्रिंग है, हम फ़ील्ड को सीधे इस तरह अपडेट करके उसे सेट करते हैं जैसे वह सामान्य Python ऑब्जेक्ट एट्रिब्यूट हो:

campaign.name = "Test campaign value"

campaign.manual_cpc एक नेस्ट किया गया फ़ील्ड है. इसका मतलब है कि इसमें एक और प्रोटोबफ़ मैसेज होता है. यह स्ट्रिंग जैसा कोई प्रिमिटिव टाइप नहीं होता. इसके फ़ील्ड को सीधे तौर पर भी अपडेट किया जा सकता है:

campaign.manual_cpc.enhanced_cpc_enabled = True

इससे एपीआई को पता चलेगा कि इस कैंपेन के पास manual_cpc बिडिंग की रणनीति है और बेहतर सीपीसी मौजूद है.

लेकिन अगर आपको manual_cpm का इस्तेमाल करना हो, जो खाली है, तो क्या होगा? या manual_cpc क्या बेहतर सीपीसी को चालू किए बिना? ऐसा करने के लिए आपको कैंपेन में क्लास का एक अलग इंस्टेंस कॉपी करना होगा, उदाहरण के लिए:

client = GoogleAdsClient.load_from_storage()

empty_cpm = client.get_type('ManualCpm')
client.copy_from(campaign.manual_cpm, empty_cpm)

ध्यान दें कि campaign ऑब्जेक्ट के लिए, manual_cpm के बारे में कैसे बताया गया है:

name {
  value: "Test campaign value"
}
manual_cpm {
}

manual_cpm फ़ील्ड को सेट किया गया है, लेकिन इसके किसी भी फ़ील्ड में वैल्यू नहीं है. इस पैटर्न का इस्तेमाल करने वाले एपीआई को अनुरोध भेजते समय, यह पुष्टि की जा सकती है कि लॉगिंग चालू करके और अनुरोध पेलोड की जांच करके, यह पुष्टि की जा सकती है कि खाली मैसेज ऑब्जेक्ट को सही तरीके से सेट किया जा रहा है.

आखिर में, आपको इस फ़ील्ड को अनुरोध ऑब्जेक्ट के update_mask में मैन्युअल तरीके से जोड़ना होगा. फ़ील्ड मास्क हेल्पर के पास साफ़ तौर पर किसी खाली ऑब्जेक्ट पर सेट किए गए फ़ील्ड और सेट न किए गए फ़ील्ड के बीच के फ़र्क़ का पता लगाने का कोई तरीका नहीं है.

from google.api_core.protobuf_helpers import field_mask

campaign_operation.create = campaign
campaign_operation.update_mask = field_mask(None, campaign)
# Here we manually add the "manual_cpm" field
campaign_operation.update_mask.append("manual_cpm")