Skip to content

Commit

Permalink
Version 13.0.13
Browse files Browse the repository at this point in the history
  • Loading branch information
xinyuwen2 committed Jan 13, 2022
1 parent 36858d5 commit 2958f4d
Show file tree
Hide file tree
Showing 12 changed files with 244 additions and 38 deletions.
7 changes: 7 additions & 0 deletions HISTORY.rst
@@ -1,6 +1,13 @@
.. :changelog:
Release History

13.0.13(2022-01-14)
+++++++++++++++++++++++++
* Update Bing Ads API Version 13 service proxies to reflect recent interface changes. For details please see the Bing Ads API Release Notes: https://docs.microsoft.com/en-us/bingads/guides/release-notes.
* Add new fields Operator mapping in WebCondition for BulkAdGroupDynamicSearchAdTarget, BulkAdGroupNegativeDynamicSearchAdTarget and BulkCampaignNegativeDynamicSearchAdTarget.
* Add NumberRuleItem mapping to BulkRemarketingList.

13.0.12(2021-10-29)
+++++++++++++++++++++++++
* Update Bing Ads API Version 13 service proxies to reflect recent interface changes. For details please see the Bing Ads API Release Notes: https://docs.microsoft.com/en-us/bingads/guides/release-notes.
Expand Down
2 changes: 1 addition & 1 deletion bingads/manifest.py
@@ -1,5 +1,5 @@
import sys
VERSION = '13.0.12'
VERSION = '13.0.13'
BULK_FORMAT_VERSION_6 = '6.0'
WORKING_NAME = 'BingAdsSDKPython'
USER_AGENT = '{0} {1} {2}'.format(WORKING_NAME, VERSION, sys.version_info[0:3])
3 changes: 3 additions & 0 deletions bingads/v13/internal/bulk/csv_headers.py
Expand Up @@ -390,6 +390,9 @@ class _CsvHeaders:
_StringTable.DynamicAdTargetValue2,
_StringTable.DynamicAdTargetCondition3,
_StringTable.DynamicAdTargetValue3,
_StringTable.DynamicAdTargetConditionOperator1,
_StringTable.DynamicAdTargetConditionOperator2,
_StringTable.DynamicAdTargetConditionOperator3,
_StringTable.PageFeedIds,
_StringTable.FeedId,

Expand Down
3 changes: 3 additions & 0 deletions bingads/v13/internal/bulk/string_table.py
Expand Up @@ -501,6 +501,9 @@ class _StringTable:
DynamicAdTargetValue2 = "Dynamic Ad Target Value 2"
DynamicAdTargetCondition3 = "Dynamic Ad Target Condition 3"
DynamicAdTargetValue3 = "Dynamic Ad Target Value 3"
DynamicAdTargetConditionOperator1 = "Dynamic Ad Target Condition Operator 1"
DynamicAdTargetConditionOperator2 = "Dynamic Ad Target Condition Operator 2"
DynamicAdTargetConditionOperator3 = "Dynamic Ad Target Condition Operator 3"

AdGroupAgeCriterion = "Ad Group Age Criterion"
AdGroupDayTimeCriterion = "Ad Group DayTime Criterion"
Expand Down
37 changes: 27 additions & 10 deletions bingads/v13/internal/extensions.py
Expand Up @@ -980,11 +980,13 @@ def entity_to_csv_DSAWebpageParameter(entity, row_values):
entity.Criterion.Parameter.Conditions.WebpageCondition is not None:
condition_prefix = _StringTable.DynamicAdTargetCondition1[:-1]
value_prefix = _StringTable.DynamicAdTargetValue1[:-1]
condition_operator_prefix = _StringTable.DynamicAdTargetConditionOperator1[:-1]

conditions = entity.Criterion.Parameter.Conditions.WebpageCondition
for i in range(0, len(conditions)):
row_values[condition_prefix + str(i + 1)] = conditions[i].Operand
row_values[value_prefix + str(i + 1)] = conditions[i].Argument
row_values[condition_operator_prefix + str(i + 1)] = conditions[i].Operator


def csv_to_entity_DSAWebpageParameter(row_values, entity):
Expand All @@ -996,11 +998,13 @@ def csv_to_entity_DSAWebpageParameter(row_values, entity):
MAX_NUMBER_OF_CONDITIONS = 3
condition_prefix = _StringTable.DynamicAdTargetCondition1[:-1]
value_prefix = _StringTable.DynamicAdTargetValue1[:-1]
condition_operator_prefix = _StringTable.DynamicAdTargetConditionOperator1[:-1]

conditions = []
for i in range(0, MAX_NUMBER_OF_CONDITIONS):
condition_success, webpage_condition = row_values.try_get_value(condition_prefix + str(i + 1))
value_success, webpage_value = row_values.try_get_value(value_prefix + str(i + 1))
condition_operator_success, webpage_condition_operator = row_values.try_get_value(condition_operator_prefix + str(i + 1))
if condition_success and value_success and webpage_condition is not None and webpage_condition != '':
condition = _CAMPAIGN_OBJECT_FACTORY_V13.create('WebpageCondition')
if webpage_condition.lower() == 'url':
Expand All @@ -1020,6 +1024,8 @@ def csv_to_entity_DSAWebpageParameter(row_values, entity):
if webpage_condition.lower() == 'none':
continue
raise ValueError("Unknown WebpageConditionOperand value: {0}".format(webpage_condition))
if condition_operator_success:
condition.Operator = webpage_condition_operator

condition.Argument = webpage_value
conditions.append(condition)
Expand Down Expand Up @@ -1651,19 +1657,28 @@ def parse_rule_items(items_str):

def parse_string_rule_item(item_str):
item_str = item_str.strip('(').strip(')')
pattern_str = r'^(Url|ReferrerUrl|None) (Equals|Contains|BeginsWith|EndsWith|NotEquals|DoesNotContain|DoesNotBeginWith|DoesNotEndWith) ([^()]*)$'
pattern_str = r'^(Url|ReferrerUrl|EcommPageType|EcommCategory|EcommProdId|Action|None) (Equals|Contains|BeginsWith|EndsWith|NotEquals|DoesNotContain|DoesNotBeginWith|DoesNotEndWith) ([^()]*)$'
number_pattern_str = r'^(EcommTotalValue) (Equals|GreaterThan|LessThan|GreaterThanEqualTo|LessThanEqualTo|NotEquals) ([^()]*)$'
pattern = re.compile(pattern_str)
number_pattern = re.compile(number_pattern_str)

match = pattern.match(item_str)

if not match:
ValueError('Invalid Rule Item:{0}'.format(item_str))

item = _CAMPAIGN_OBJECT_FACTORY_V13.create('StringRuleItem')
item.Type = 'String'
item.Operand = match.group(1)
item.Operator = parse_string_operator(match.group(2))
item.Value = match.group(3)
if match:
item = _CAMPAIGN_OBJECT_FACTORY_V13.create('StringRuleItem')
item.Type = 'String'
item.Operand = match.group(1)
item.Operator = parse_string_operator(match.group(2))
item.Value = match.group(3)
else:
match = number_pattern.match(item_str)
if match:
item = _CAMPAIGN_OBJECT_FACTORY_V13.create('NumberRuleItem')
item.Type = 'Number'
item.Operand = match.group(1)
item.Operator = parse_number_operator(match.group(2))
item.Value = match.group(3)
else:
ValueError('Invalid Rule Item:{0}'.format(item_str))

return item

Expand All @@ -1680,6 +1695,8 @@ def parse_number_operator(operator):
return NumberOperator.GreaterThanEqualTo
if oper == 'lessthanequalto':
return NumberOperator.LessThanEqualTo
if oper == 'notequals':
return NumberOperator.NotEquals
raise ValueError('Invalid Number Rule Item operator:{0}'.format(operator))


Expand Down
109 changes: 97 additions & 12 deletions bingads/v13/proxies/production/campaignmanagement_service.xml
Expand Up @@ -342,6 +342,13 @@
<xs:enumeration value="Buy" />
<xs:enumeration value="OpenLink" />
<xs:enumeration value="RegisterNow" />
<xs:enumeration value="Automated">
<xs:annotation>
<xs:appinfo>
<EnumerationValue xmlns="http://schemas.microsoft.com/2003/10/Serialization/">100</EnumerationValue>
</xs:appinfo>
</xs:annotation>
</xs:enumeration>
</xs:restriction>
</xs:simpleType>
<xs:element name="CallToAction" nillable="true" type="tns:CallToAction" />
Expand Down Expand Up @@ -1527,9 +1534,17 @@
<xs:sequence>
<xs:element minOccurs="0" name="Version" nillable="true" type="xs:string" />
<xs:element minOccurs="0" name="LanguageLocale" nillable="true" type="xs:string" />
<xs:element minOccurs="0" name="CompressionType" nillable="true" type="tns:CompressionType" />
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:simpleType name="CompressionType">
<xs:restriction base="xs:string">
<xs:enumeration value="Zip" />
<xs:enumeration value="GZip" />
</xs:restriction>
</xs:simpleType>
<xs:element name="CompressionType" nillable="true" type="tns:CompressionType" />
<xs:element name="GetGeoLocationsFileUrlResponse">
<xs:complexType>
<xs:sequence>
Expand Down Expand Up @@ -3556,6 +3571,13 @@
<xs:sequence>
<xs:element minOccurs="0" name="Argument" nillable="true" type="xs:string" />
<xs:element minOccurs="0" name="Operand" type="tns:WebpageConditionOperand" />
<xs:element minOccurs="0" name="Operator" nillable="true" type="tns:WebpageConditionOperator">
<xs:annotation>
<xs:appinfo>
<DefaultValue EmitDefaultValue="false" xmlns="http://schemas.microsoft.com/2003/10/Serialization/" />
</xs:appinfo>
</xs:annotation>
</xs:element>
</xs:sequence>
</xs:complexType>
<xs:element name="WebpageCondition" nillable="true" type="tns:WebpageCondition" />
Expand All @@ -3570,6 +3592,14 @@
</xs:restriction>
</xs:simpleType>
<xs:element name="WebpageConditionOperand" nillable="true" type="tns:WebpageConditionOperand" />
<xs:simpleType name="WebpageConditionOperator">
<xs:restriction base="xs:string">
<xs:enumeration value="Unknown" />
<xs:enumeration value="Equals" />
<xs:enumeration value="Contains" />
</xs:restriction>
</xs:simpleType>
<xs:element name="WebpageConditionOperator" nillable="true" type="tns:WebpageConditionOperator" />
<xs:complexType name="AgeCriterion">
<xs:complexContent mixed="false">
<xs:extension base="tns:Criterion">
Expand Down Expand Up @@ -5040,6 +5070,30 @@
</xs:restriction>
</xs:simpleType>
<xs:element name="StringOperator" nillable="true" type="tns:StringOperator" />
<xs:complexType name="NumberRuleItem">
<xs:complexContent mixed="false">
<xs:extension base="tns:RuleItem">
<xs:sequence>
<xs:element minOccurs="0" name="Operand" nillable="true" type="xs:string" />
<xs:element minOccurs="0" name="Operator" type="tns:NumberOperator" />
<xs:element minOccurs="0" name="Value" nillable="true" type="xs:string" />
</xs:sequence>
</xs:extension>
</xs:complexContent>
</xs:complexType>
<xs:element name="NumberRuleItem" nillable="true" type="tns:NumberRuleItem" />
<xs:simpleType name="NumberOperator">
<xs:restriction base="xs:string">
<xs:enumeration value="None" />
<xs:enumeration value="Equals" />
<xs:enumeration value="GreaterThan" />
<xs:enumeration value="LessThan" />
<xs:enumeration value="GreaterThanEqualTo" />
<xs:enumeration value="LessThanEqualTo" />
<xs:enumeration value="NotEquals" />
</xs:restriction>
</xs:simpleType>
<xs:element name="NumberOperator" nillable="true" type="tns:NumberOperator" />
<xs:complexType name="PageVisitorsWhoVisitedAnotherPageRule">
<xs:complexContent mixed="false">
<xs:extension base="tns:RemarketingRule">
Expand Down Expand Up @@ -5079,17 +5133,6 @@
</xs:complexContent>
</xs:complexType>
<xs:element name="CustomEventsRule" nillable="true" type="tns:CustomEventsRule" />
<xs:simpleType name="NumberOperator">
<xs:restriction base="xs:string">
<xs:enumeration value="None" />
<xs:enumeration value="Equals" />
<xs:enumeration value="GreaterThan" />
<xs:enumeration value="LessThan" />
<xs:enumeration value="GreaterThanEqualTo" />
<xs:enumeration value="LessThanEqualTo" />
</xs:restriction>
</xs:simpleType>
<xs:element name="NumberOperator" nillable="true" type="tns:NumberOperator" />
<xs:complexType name="CustomAudience">
<xs:complexContent mixed="false">
<xs:extension base="tns:Audience">
Expand Down Expand Up @@ -5240,6 +5283,7 @@
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:enumeration value="NormalForm" />
<xs:enumeration value="NumberRuleItem" />
</xs:restriction>
</xs:simpleType>
</xs:list>
Expand Down Expand Up @@ -6054,6 +6098,13 @@
<xs:element minOccurs="0" name="NewDemographicTargets" nillable="true" type="xs:boolean" />
<xs:element minOccurs="0" name="NewDeviceTargets" nillable="true" type="xs:boolean" />
<xs:element minOccurs="0" name="NewEntities" nillable="true" type="xs:boolean" />
<xs:element minOccurs="0" name="NewImageAdExtensions" nillable="true" type="xs:boolean">
<xs:annotation>
<xs:appinfo>
<DefaultValue EmitDefaultValue="false" xmlns="http://schemas.microsoft.com/2003/10/Serialization/" />
</xs:appinfo>
</xs:annotation>
</xs:element>
<xs:element minOccurs="0" name="NewKeywordUrls" nillable="true" type="xs:boolean" />
<xs:element minOccurs="0" name="NewKeywordsForExistingAdGroups" nillable="true" type="xs:boolean" />
<xs:element minOccurs="0" name="NewLabels" nillable="true" type="xs:boolean" />
Expand All @@ -6072,7 +6123,13 @@
<xs:element minOccurs="0" name="NewSitelinkAdExtensions" nillable="true" type="xs:boolean" />
<xs:element minOccurs="0" name="NewStructuredSnippetAdExtensions" nillable="true" type="xs:boolean" />
<xs:element minOccurs="0" name="NewUrlOptions" nillable="true" type="xs:boolean" />
<xs:element minOccurs="0" name="PauseAIMAdGroupIfAllAudienceCriterionNotImported" nillable="true" type="xs:boolean" />
<xs:element minOccurs="0" name="PauseAIMAdGroupIfAllAudienceCriterionNotImported" nillable="true" type="xs:boolean">
<xs:annotation>
<xs:appinfo>
<DefaultValue EmitDefaultValue="false" xmlns="http://schemas.microsoft.com/2003/10/Serialization/" />
</xs:appinfo>
</xs:annotation>
</xs:element>
<xs:element minOccurs="0" name="PauseCampaignsWithoutSupportedLocations" nillable="true" type="xs:boolean" />
<xs:element minOccurs="0" name="PauseNewCampaigns" nillable="true" type="xs:boolean" />
<xs:element minOccurs="0" name="RaiseBidsToMinimum" nillable="true" type="xs:boolean" />
Expand Down Expand Up @@ -6107,6 +6164,13 @@
<xs:element minOccurs="0" name="UpdateDemographicTargets" nillable="true" type="xs:boolean" />
<xs:element minOccurs="0" name="UpdateDeviceTargets" nillable="true" type="xs:boolean" />
<xs:element minOccurs="0" name="UpdateEntities" nillable="true" type="xs:boolean" />
<xs:element minOccurs="0" name="UpdateImageAdExtensions" nillable="true" type="xs:boolean">
<xs:annotation>
<xs:appinfo>
<DefaultValue EmitDefaultValue="false" xmlns="http://schemas.microsoft.com/2003/10/Serialization/" />
</xs:appinfo>
</xs:annotation>
</xs:element>
<xs:element minOccurs="0" name="UpdateKeywordUrls" nillable="true" type="xs:boolean" />
<xs:element minOccurs="0" name="UpdateLabels" nillable="true" type="xs:boolean" />
<xs:element minOccurs="0" name="UpdateLocationAdExtensions" nillable="true" type="xs:boolean" />
Expand Down Expand Up @@ -6246,6 +6310,27 @@
</xs:appinfo>
</xs:annotation>
</xs:enumeration>
<xs:enumeration value="AdScheduleUseSearcherTimezone">
<xs:annotation>
<xs:appinfo>
<EnumerationValue xmlns="http://schemas.microsoft.com/2003/10/Serialization/">16</EnumerationValue>
</xs:appinfo>
</xs:annotation>
</xs:enumeration>
<xs:enumeration value="NewImageAdExtensions">
<xs:annotation>
<xs:appinfo>
<EnumerationValue xmlns="http://schemas.microsoft.com/2003/10/Serialization/">32</EnumerationValue>
</xs:appinfo>
</xs:annotation>
</xs:enumeration>
<xs:enumeration value="UpdateImageAdExtensions">
<xs:annotation>
<xs:appinfo>
<EnumerationValue xmlns="http://schemas.microsoft.com/2003/10/Serialization/">64</EnumerationValue>
</xs:appinfo>
</xs:annotation>
</xs:enumeration>
</xs:restriction>
</xs:simpleType>
</xs:list>
Expand Down
3 changes: 3 additions & 0 deletions bingads/v13/proxies/production/reporting_service.xml
Expand Up @@ -2027,6 +2027,8 @@
<xs:enumeration value="ConversionsQualified" />
<xs:enumeration value="AllConversionsQualified" />
<xs:enumeration value="ViewThroughConversionsQualified" />
<xs:enumeration value="Neighborhood" />
<xs:enumeration value="QueryIntentNeighborhood" />
</xs:restriction>
</xs:simpleType>
<xs:element name="UserLocationPerformanceReportColumn" nillable="true" type="tns:UserLocationPerformanceReportColumn" />
Expand Down Expand Up @@ -3577,6 +3579,7 @@
<xs:enumeration value="ConversionsQualified" />
<xs:enumeration value="AllConversionsQualified" />
<xs:enumeration value="ViewThroughConversionsQualified" />
<xs:enumeration value="Neighborhood" />
</xs:restriction>
</xs:simpleType>
<xs:element name="GeographicPerformanceReportColumn" nillable="true" type="tns:GeographicPerformanceReportColumn" />
Expand Down
2 changes: 1 addition & 1 deletion bingads/v13/proxies/sandbox/adinsight_service.xml
Expand Up @@ -3049,7 +3049,7 @@
</wsdl:binding>
<wsdl:service name="AdInsightService">
<wsdl:port name="BasicHttpBinding_IAdInsightService" binding="tns:BasicHttpBinding_IAdInsightService">
<soap:address location="https://adinsight.api.sandbox.bingads.microsoft.com/Api/Advertiser/AdInsight/v13/AdInsightService.svc" />
<soap:address location="https://adinsight.api.sandbox.bingads.microsoft.com/Api/Advertiser/AdInsight/V13/AdInsightService.svc" />
</wsdl:port>
</wsdl:service>
</wsdl:definitions>
2 changes: 1 addition & 1 deletion bingads/v13/proxies/sandbox/bulk_service.xml
Expand Up @@ -1698,7 +1698,7 @@
</wsdl:binding>
<wsdl:service name="BulkService">
<wsdl:port name="BasicHttpBinding_IBulkService" binding="tns:BasicHttpBinding_IBulkService">
<soap:address location="https://bulk.api.sandbox.bingads.microsoft.com/Api/Advertiser/CampaignManagement/V13/BulkService.svc" />
<soap:address location="https://bulk.api.sandbox.bingads.microsoft.com/Api/Advertiser/CampaignManagement/v13/BulkService.svc" />
</wsdl:port>
</wsdl:service>
</wsdl:definitions>

0 comments on commit 2958f4d

Please sign in to comment.