How do Adparams works in Google Adwords PHP api - google-ads-api

I have 700 products to create ads each with different cost and year of make and i want to display this values in my ad and change them dynamically. so i have used adparams in the headline and in description1 as
$textAd->headline = 'Sale! productname {param1:2011}';
$textAd->description1 = 'For Just ${param2:25000}';
as descried in the forums. and i have created set the adparams to the keywords.
$adParam1 = new AdParam($adGroupId, $keywordId, $year, 1);
$adParam2 = new AdParam($adGroupId, $keywordId, $price, 2);
// Create operations.
$adParamOperation1 = new AdParamOperation();
$adParamOperation1->operand = $adParam1;
$adParamOperation1->operator = 'SET';
$adParamOperation2 = new AdParamOperation();
$adParamOperation2->operand = $adParam2;
$adParamOperation2->operator = 'SET';
since adparams is related to keywords and keywords related to adgroup and not ads, I have created adgroup for each ad(so that i have 700 adgroups). And each adgroup has a Ad with a related keyword. Now when i get the ads using the api.
I get something like this
........
[ad] => TextAd Object
(
[headline] => Sale! product {param1:2011}
[description1] => Just ${param2:25000}
.........
the param strings are shown as such, i could not determine whether the adparams, works correctly and also im not confident that i'm in the right path. Please help me in doing this.

Ad params are keyword level, and adverts are adgroups based.
If your Adwords account is structure correctly, there shouldn't Be any issues here.
The advert will always look like it does above (with {param1:default} etc) in editor and online, but the actual advert displayed on google search would contain the params you set on the keyword. If no pram is set, it would default to the value inside the bracket.
From my experience of using ad params, it was more complicated as our ppc staff couldn't change adverts through Adwords editor which caused more issues.
Another method, is to simply delete old adverts (which are never really deleted) and create new ones on any change.
The main benefit of ad params, is the data collection is consistent when changing the content of the params. Where as changing the actual adverts completely removes all historic data.
Hope that helps.

Related

Does Google AdWords support automatically appending a different query string to a campaign's destination URLs for ads and sitelinks?

I have an existing Google ad campaign that geotargets a particular region. The destination URL of all the ads and sitelinks have the same query string appended to it ("area=astoria").
I now need to copy this campaign to 50 other campaigns, each of which will target a different region. Each campaign will have a different value for the area key, so for instance one campaign might use "area=manhattan" and another "area=bronx".
The campaign I'm cloning has many ads and sitelinks, all of which need to have the query string changed. I know how to manually change the destination urls, but it's an enormous amount of busy work...
As a workaround, is there a way to automatically append a different query string to all the destination URLs for ads and sitelinks in a particular campaign in Google AdWords?
To answer my own question, the answer is to use a Tracking Template on the Campaign level.
To do this, click into the Campaign you want to edit and click on the Settings tab. Then open the "Campaign URL options (advanced)" section and change the Tracking URL to something like this:
{lpurl}?area=whatever
You can click the TEST button to make sure your ads work. Your sitelinks should also have the same query string appended to it. (Note that a Campaign-level Tracking Template can be overridden at the Adgroup-, Ad-, or Sitelink-level, so those more specific Tracking Templates would have to not be used for a Campaign-level Tracking Template to be used.)

Set the Visitor ID in Adobe Analytics through DTM

I'm trying to set the Visitor ID in Adobe Analytics through DTM.
Above the s_code I have:
var visitor = new Visitor("xxxx")
visitor.trackingServer = "xxx.xx.xx.omtrdc.net"
I've created a data element where the legacy code used to call the
Visitor.getInstance("xxxx");
and set the Visitor ID to %Visitor ID%
That's not working however, and my visitor ID is always just set to %Visitor ID% and obviously not reading any values. I'd really appreciate any input that someone can give me.
Thanks,
Mike
The Visitor ID pops s.visitorID and is in general related to visitor id, but is not the same as s.visitor which is what gets popped for the VisitorAPI integration. DTM does not currently have a built-in field for the s.visitor variable, so you will have to set it yourself within the config, either in the Library Management code editor (assuming you are opting to c/p the core lib and not the "Managed by Adobe" option) or else in the Custom Page Code section.
Since you are popping it in a data layer first, you can reference the data layer like this:
s.visitor = _satellite.getVar('Visitor ID');
NOTE: A separate potential issue you may have is with whether or not the Visitor object is available for your data element. Since data elements are the first thing to be evaluated by DTM, you will need to ensure that the VisitorAPI.js library is output before your top page DTM script include.
If this is a problem for you, or if you are wanting to host VisitorAPI.js within DTM, then you may need to adjust where you are popping that stuff. For example, place the VisitorAPI core code above the custom code as the first stuff within the data element, before:
var visitor = new Visitor("xxxx") visitor.trackingServer = "xxx.xx.xx.omtrdc.net
Or, don't use the data element at all. Instead, put the VisitorAPI code within the Adobe Analytics custom code or core lib section and pop all that stuff (aboove the s.visitor assignment). Or a number of other methods; point is, VisitorAPI stuff must be loaded before the data element can make use of it, same as it must be loaded before Adobe Analytics can make use of it.
So DTM is changing pretty fast and furious right now. They have a "Marketing Cloud Service ID" that works well. Before I used that, however, I did find a way to fix the code. Crayon Violent was right, as usual, that the problem was that the script wasn't available yet. I fixed this by putting the following code in between the VisitorAPI.js and the AppMeasurement stuff in the DTM managed library.
var aA = new AppMeasurement();
aA.visitorNamespace="companyname";
aA.visitor = Visitor.getInstance("companyname");
In addition, there were also some issues using my localhost for testing while trying to see if I had this correct or not. If you are having issues and think you have it correct, it may be worthwhile to elevate it to a different environment.

InvoiceAddGroup QuickBooks SDK Incorrect Price

I wrote a program that downloads orders from a website and creates invoices using the SDK.
A few products are listed as Groups in QuickBooks, so when adding them to the invoice, I can't list the price.
If IList.Item(x).Type = 2 Then
Dim ORInvoiceLineAddListElement2 As IORInvoiceLineAdd
ORInvoiceLineAddListElement2 = newInvoice.ORInvoiceLineAddList.Append()
ORInvoiceLineAddListElement2.InvoiceLineGroupAdd.ItemGroupRef.FullName.SetValue(IList.Item(x).FullName)
ORInvoiceLineAddListElement2.InvoiceLineGroupAdd.Quantity.SetValue(IList.Item(x).Quantity)
'ORInvoiceLineAddListElement2.InvoiceLineGroupAdd.Desc.SetValue(IList.Item(x).DESC)
End If
This will input into QuickBooks just fine, however, the price will be based on a retail customer, even if the customer class is set to wholesale. I know that the customer class is correct because everything else shows up correctly in the generated invoice.
Any suggestions on what i could try to get this group item priced correctly?
Thanks for your help!!!
QuickBooks Class codes have nothing at all to do with pricing. They have no effect what-so-ever on pricing in any form or manner.
What makes you think setting the Class should change pricing in any way?
I was having the same issue. what is happening is the Group line items are being assigned the Default Price from the Items table. shouldn't have anything to do with the Class. I did find the following support answer which seems to apply to both Desktop and Online versions of QuickBooks:
"The SDK does not currently support adjusting the price of group items when adding an invoice, even though the default UI in QuickBooks allows this. You can modify an invoice and change the line item amounts, so you would need to first call create the add, read the response to get the transaction id and edit sequence, then do an Invoice Mod request on the invoice to set the rates that you want."
Intuit Developer Page

How to retrieve hashtaged tweets from a list of users

Is there a way retrieving all the tweets from a list of profiles (3) which are tagged with certain #hashtag in a single call to the Twitter API using 1.1?
If not, obviously, I'd be retrieving a hundred tweets from each user, and filtering out those which do not have the #hashtag .. but it's not very efficient, right?
Thanks in advance
Note: I've updated the library so I suggest you grab the newly updated version before trying this - I've made it so you don't need to manually encode each individual character.
This page shows you how to use search, and has a number of operators down toward the bottom of the page. One of these is the OR operator:
Getting tweets for multiple users
OR - Either this or that
love OR hate - containing either "love" or "hate" (or both)
From - From this user
from:twitterapi sent from the user #twitterapi
So, armed with the above knowledge, I'm guessing your query would look like this:
Translated into a GET request:
?q=from:user1+OR+from:user2
Getting tweets for specific hashtags
So that's how you get tweets for multiple users. The next step you want is for certain hashtags.
#haiku - containing the hashtag "haiku"
That translated individually into the correct format becomes:
?#haiku (or %2C haiku, depending on the library / urlencoding you're using)
Combining the above
The standard AND operator looks like this:
twitter search - containing both "twitter" and "search". Default operator
For a get request:
?twitter+search
So let's combine all this!
?q=#hashtag1+#hashtag2+from:user1+OR+from:user2
And, because you're using my lib, here's the code for that:
$url = 'https://api.twitter.com/1.1/search/tweets.json';
$requestMethod = 'GET';
$getfield = '?q=#hashtag1+OR+#hashtag2+from:username1+OR+from:username2';
$twitter = new TwitterAPIExchange($settings);
$json = $twitter->setGetfield($getfield)
->buildOauth($url, $requestMethod)
->performRequest();
var_dump(json_decode($json));

youtube analyticsService Report parameters

I am authenticating with google to try and get youtube analytics my problem is that i don't know how to filled you the parameters when quering youtube
here i am making a new service: and then try to query it
I am not sure what to put in the "ids" parameter or where to find it?
What do I put there?
_analyticService = new YoutubeAnalyticsService(_authenticator = CreateAuthenticator());
...
_analyticService.Reports.Query("ids", "2013-01-01", "2013-02-02", "views").Fetch();
The ids parameter is the an expression with the id of your channel. If you go to http://www.youtube.com/analytics and click on the title with your own channel name, you get a link like http://www.youtube.com/channel/UCYHMS8hN8s49F93iJuEgG6w The last part is the id of your channel. You have to use this as the ids parameter in an expression like "channel==UCYHMS8hN8s49F93iJuEgG6w". This is to query in the context of your own channel. This is needed as you might have access to several channels.
I can query views for one of my videos by: https://www.googleapis.com/youtube/analytics/v1/reports?ids=channel%3D%3DUCYHMS8hN8s49F93iJuEgG6w&start-date=2013-01-01&end-date=2013-02-02&metrics=views&dimensions=day&filters=video%3D%3D_iwmv6644dA&sort=day&key={YOUR_API_KEY}
Try to use the API explorer at the bottom of this page, there are some text explaining the different parameters there as well. https://developers.google.com/youtube/analytics/v1/
Hope it goes well!

Resources