Hi Simon, Nice to know. If you have 2-legged authentication turned on, then you need to generate an application-specific password as discussed at http://adwordsapi.blogspot.com/2011/02/authentication-changes-with-2-step.html.
Cheers, Anash P. Oommen, AdWords API Advisor. On Monday, 2 April 2012 14:29:17 UTC+5:30, baynezy wrote: > > Anash, > Thanks very much for your help on this. I think I have solved the problem, > I think it is because my Gmail account has the 2-legged authentication > turned on. I am using a different account now and it is now working. > > Thanks. > > Simon > > On Friday, 30 March 2012 05:30:45 UTC+1, Anash P. Oommen wrote: >> >> Hi Simon, >> >> v201101 got sunset last month. Try v201109.GetCampaigns as the command >> line version. (Or in general, apiversion.codeexamplename as command line >> argument). I'll update the video appropriately or leave comments on the >> youtube video. >> >> Cheers, >> Anash >> >> On Thursday, 29 March 2012 21:23:29 UTC+5:30, baynezy wrote: >>> >>> Anash, >>> Thanks very much this is starting to come together. I have set up the >>> Web.config as requested and I am trying to run >>> http://code.google.com/p/google-api-adwords-dotnet/source/browse/trunk/examples/adwords/csharp/v201109/BasicOperations/GetCampaigns.cs. >>> >>> I am adding adding a command line argument of 'v201101.GetAllCampaigns' as >>> you specify in your YouTube video >>> http://www.youtube.com/watch?v=XRqbqtsGO_g&feature=player_embedded. >>> However, every time I run it it just list the help text to the console. It >>> is like it does not see he command line arguments. I also compiled the exe >>> and ran it from the command line with 'v201101.GetAllCampaigns' and it also >>> just outputs the help text. It is like I am having a bad brain moment, and >>> cannot see why this is failing. I would appreciate some thoughts on what I >>> am doing wrong if you can think of something obvious. >>> >>> On Thursday, 29 March 2012 13:32:16 UTC+1, Anash P. Oommen wrote: >>>> >>>> Hi Simon, >>>> >>>> Almost forgot to mention: since you are making calls to the sandbox, >>>> you need to initialize the sandbox and use the clientCustomerIds in it. >>>> >>>> 1. In your Web.config, you should have email/password as your gmail >>>> email/password. Comment out clientCustomerId. >>>> 2. Call GetCampaigns.cs. Reference example is at >>>> http://code.google.com/p/google-api-adwords-dotnet/source/browse/trunk/examples/adwords/csharp/v201109/BasicOperations/GetCampaigns.cs. >>>> >>>> This will initialize your sandbox. >>>> 3. Call GetAccountHiearchy.cs. Example here: >>>> http://code.google.com/p/google-api-adwords-dotnet/source/browse/trunk/examples/adwords/csharp/v201109/AccountManagement/GetAccountHierarchy.cs. >>>> >>>> This will return the sandbox accounts that were created for you. >>>> 4. Copy one of those customerIds into your >>>> web.config's clientCustomerId key, and uncomment the key. >>>> 5. Run any code example. >>>> >>>> Anash >>>> >>>> On Thursday, 29 March 2012 17:57:07 UTC+5:30, Anash P. Oommen wrote: >>>>> >>>>> Hi Simon, >>>>> >>>>> I see... let's get a code example running in that case... >>>>> >>>>> The easiest approach is as follows: >>>>> >>>>> 1. Make sure your Web.config looks exactly as follows: >>>>> http://code.google.com/p/google-api-adwords-dotnet/source/browse/trunk/examples/adwords/csharp/App.config. >>>>> >>>>> In case you have other stuff in your Web.config, you need to merge the >>>>> two. >>>>> >>>>> 2. Enter your MCC email, password, clientCustomerId, developerToken in >>>>> your Web.config. >>>>> 3. In your code, do >>>>> >>>>> AdWordsUser user = new AdWordsUser();// this loads all configs from >>>>> your Web.Config >>>>> CampaignService service = (CampaignService) >>>>> user.GetService(AdWordsService.v201109.CampaignService); >>>>> // Build your campaign, operation, do service.mutate(). Refer to the >>>>> examples folder in the downloaded zip for various code examples. >>>>> >>>>> 4. Run your website. If you face any issues, let me know, along with >>>>> the error you are facing. >>>>> >>>>> Cheers, >>>>> Anash >>>>> >>>>> On Thursday, 29 March 2012 17:21:25 UTC+5:30, baynezy wrote: >>>>>> >>>>>> Anash, >>>>>> Again thank you for your quick response. I am building a web >>>>>> application that when new items are added to our system we can >>>>>> potentially >>>>>> automatically add a new Campaign to the our AdWords account and then >>>>>> subsequently new AdGroups, Ads and Keywords. I am at the early stages >>>>>> really learning the capabilities of the API and I am having a few >>>>>> problems >>>>>> getting going. I downloaded the the .Net client library from here >>>>>> http://code.google.com/p/google-api-adwords-dotnet/ and I am using >>>>>> that as the basis of starting my own proof of concept project. Mainly my >>>>>> issues are compounded by the fact that all the examples I can find are a >>>>>> mix of different versions and so I am a little unclear on how to get >>>>>> going. >>>>>> >>>>>> I think what I really need help with is how to get the AdWordsUser >>>>>> authenticated in a way that I can the access the API from then on with >>>>>> no >>>>>> challenge. I have no requirement to use OAuth as this will be an >>>>>> internal >>>>>> service using just our company AdWords account. >>>>>> >>>>>> What I have so far is based on a combination of this Java example >>>>>> http://code.google.com/apis/adwords/docs/first-request.html and this >>>>>> article you wrote >>>>>> http://code.google.com/p/google-api-adwords-dotnet/wiki/HowToUseAdWordsUser >>>>>> >>>>>> Here is my code:- >>>>>> >>>>>> public ActionResult Create() >>>>>> { >>>>>> var headers = new Dictionary<string, string> >>>>>> { >>>>>> {"CompanyName", "MyCompany.com"}, >>>>>> {"Email", "[email protected]"}, >>>>>> {"Password", "password"}, >>>>>> {"DeveloperToken", " myemail @gmail.com++USD"} >>>>>> }; >>>>>> var user = new AdWordsUser(headers); >>>>>> var service = >>>>>> (CampaignService)user.GetService(AdWordsService.v201109.CampaignService, >>>>>> " >>>>>> https://sandbox.google.com"); >>>>>> var budget = new Budget >>>>>> { >>>>>> period = BudgetBudgetPeriod.DAILY, >>>>>> amount = new Money(), >>>>>> deliveryMethod = BudgetBudgetDeliveryMethod.STANDARD >>>>>> }; >>>>>> >>>>>> var campaign = new Campaign >>>>>> { >>>>>> name = "Simon Campaign", >>>>>> status = CampaignStatus.PAUSED, >>>>>> biddingStrategy = new ManualCPC(), >>>>>> budget = budget >>>>>> }; >>>>>> var operation = new CampaignOperation {operand = campaign, @operator >>>>>> = Operator.ADD}; >>>>>> var operations = new[] { operation }; >>>>>> var result = service.mutate(operations); >>>>>> >>>>>> return View(); >>>>>> >>>>>> This is an ASP.NET MVC 3 web application, when executing the code >>>>>> above I get an AuthTokenException. When I dig into the error it is >>>>>> because >>>>>> I am getting an System.Net.WebException {"The remote server returned an >>>>>> error: (403) Forbidden."}. I get exactly the same response when I remove >>>>>> the second argument from the GetService call on AdWordsUser. >>>>>> >>>>>> If you could point me in the right direction I would be eternally >>>>>> grateful. >>>>>> >>>>>> On Thursday, 29 March 2012 12:20:14 UTC+1, Anash P. Oommen wrote: >>>>>>> >>>>>>> Hi Simon, >>>>>>> >>>>>>> AFAIK, OAuth doesn't present a Captcha challenge, ClientLogin API >>>>>>> does. Sounds like a misconfiguration to me. OAuth 1.0a access tokens >>>>>>> don't >>>>>>> expire, so you need to get the user to enter the credentials once to >>>>>>> generate an accessToken, save it, and then keep reusing it for future >>>>>>> requests. The other option is to link the client account under your >>>>>>> MCC, >>>>>>> and use your credentials to generate AuthTokens. That way, you won't >>>>>>> have >>>>>>> to ask for your client's credentials at all, but the linking process is >>>>>>> manual. >>>>>>> >>>>>>> Could you provide some more details of your application? E.g. is it >>>>>>> a web application? >>>>>>> >>>>>>> Cheers, >>>>>>> Anash P. Oommen, >>>>>>> AdWords API Advisor. >>>>>>> >>>>>>> >>>>>>> >>>>>>> On Thursday, 29 March 2012 16:31:31 UTC+5:30, baynezy wrote: >>>>>>>> >>>>>>>> Anash, >>>>>>>> Thanks very much for your help on this. I think I have gone down the >>>>>>>> wrong path here. The OAuth version of the API presents me with a >>>>>>>> CAPTCH challenge that I need to forward to the user. However, I am >>>>>>>> not >>>>>>>> creating a client application for users to manage their AdWords >>>>>>>> accounts where this process makes perfect sense as I would not want >>>>>>>> to >>>>>>>> store their account credentials. However, I am building an >>>>>>>> integration >>>>>>>> with my application so I can programmatically create campaigns, >>>>>>>> adgroups, etc. and this CAPTCHA challenge makes this not feasible as >>>>>>>> this will not be in response to a user action but an automated >>>>>>>> process. Is there a way to interact with the API where I can use my >>>>>>>> credentials that I know, without having to deal with manually >>>>>>>> authenticating? >>>>>>>> >>>>>>>> Thanks again. >>>>>>>> >>>>>>>> Simon Baynes >>>>>>>> >>>>>>>> On Thursday, March 29, 2012 10:04:12 AM UTC+1, Anash P. Oommen >>>>>>>> wrote: >>>>>>>>> >>>>>>>>> Hi Simon, >>>>>>>>> >>>>>>>>> There are couple more pieces to getting OAuth to work on an >>>>>>>>> ASP.NET website. >>>>>>>>> >>>>>>>>> 1. There's some initialization code that should go in your >>>>>>>>> Global.asax. : >>>>>>>>> http://code.google.com/p/google-api-adwords-dotnet/source/browse/trunk/examples/adwords/csharp/oauth/Global.asax.cs >>>>>>>>> >>>>>>>>> 2. There should be some mechanism to trigger the OAuth signup, as >>>>>>>>> shown here: >>>>>>>>> >>>>>>>>> http://code.google.com/p/google-api-adwords-dotnet/source/browse/trunk/examples/adwords/csharp/oauth/GetAllCampaigns.aspx.cs#58 >>>>>>>>> >>>>>>>>> >>>>>>>>> Hope this helps: Let me know if you have more questions. >>>>>>>>> >>>>>>>>> Cheers, >>>>>>>>> Anash P. Oommen, >>>>>>>>> AdWords API Advisor. >>>>>>>>> >>>>>>>>> On Wednesday, 28 March 2012 20:09:13 UTC+5:30, baynezy wrote: >>>>>>>>>> >>>>>>>>>> I am trying (with not much luck) to access the Google AdWords API >>>>>>>>>> using the .Net Client >>>>>>>>>> Library<http://code.google.com/p/google-api-adwords-dotnet/>to >>>>>>>>>> access their >>>>>>>>>> SandBox <http://code.google.com/apis/adwords/docs/sandbox.html>API. >>>>>>>>>> >>>>>>>>>> Here is my code:- >>>>>>>>>> >>>>>>>>>> >>>>>>>>>> // create campaign >>>>>>>>>> var campaign = new Campaign >>>>>>>>>> { >>>>>>>>>> name = "Simon's Campaign", >>>>>>>>>> status = CampaignStatus.ACTIVE, >>>>>>>>>> servingStatus = >>>>>>>>>> ServingStatus.SERVING, >>>>>>>>>> budget = new Budget >>>>>>>>>> { >>>>>>>>>> period = >>>>>>>>>> BudgetBudgetPeriod.DAILY, >>>>>>>>>> amount = new >>>>>>>>>> Money >>>>>>>>>> { >>>>>>>>>> >>>>>>>>>> microAmount = 100000 >>>>>>>>>> >>>>>>>>>> }, >>>>>>>>>> >>>>>>>>>> deliveryMethod = BudgetBudgetDeliveryMethod.STANDARD >>>>>>>>>> }, >>>>>>>>>> adServingOptimizationStatus = >>>>>>>>>> AdServingOptimizationStatus.OPTIMIZE, >>>>>>>>>> frequencyCap = new FrequencyCap >>>>>>>>>> { >>>>>>>>>> >>>>>>>>>> impressions = 100000, >>>>>>>>>> >>>>>>>>>> timeUnit = TimeUnit.MINUTE, >>>>>>>>>> level = >>>>>>>>>> Level.CAMPAIGN >>>>>>>>>> } >>>>>>>>>> }; >>>>>>>>>> var operation = new CampaignOperation {@operator = >>>>>>>>>> Operator.ADD, operand = campaign}; >>>>>>>>>> var operations = new CampaignOperation[1]; >>>>>>>>>> operations[0] = operation; >>>>>>>>>> >>>>>>>>>> >>>>>>>>>> // get service >>>>>>>>>> var user = new AdWordsUser(); >>>>>>>>>> var url = Request.Url.GetLeftPart(UriPartial.Path); >>>>>>>>>> var config = user.Config as AdWordsAppConfig; >>>>>>>>>> user.OAuthProvider = new AdsOAuthNetProvider( >>>>>>>>>> config.OAuthConsumerKey, >>>>>>>>>> config.OAuthConsumerSecret, >>>>>>>>>> AdWordsService.GetOAuthScope(user.Config as >>>>>>>>>> AdWordsAppConfig), >>>>>>>>>> url, >>>>>>>>>> Session.SessionID >>>>>>>>>> ); >>>>>>>>>> >>>>>>>>>> var service = (CampaignService) >>>>>>>>>> user.GetService(AdWordsService.v201109.CampaignService); >>>>>>>>>> var page = service.mutate(operations); >>>>>>>>>> >>>>>>>>>> When I run this I get an `AdWordsApiException` with an >>>>>>>>>> InnerException `AuthenticationError.OAUTH_TOKEN_HEADER_INVALID @ >>>>>>>>>> Service[CampaignService.mutate]` >>>>>>>>>> >>>>>>>>>> Now I have the following in my `Web.config`:- >>>>>>>>>> >>>>>>>>>> <!-- Note: For testing purposes, you can use the OAuth >>>>>>>>>> consumer key/secret as anonymous/anonymous.--> >>>>>>>>>> <add key="AuthorizationMethod" value="OAuth"/> >>>>>>>>>> <add key="OAuthConsumerKey" value="anonymous"/> >>>>>>>>>> <add key="OAuthConsumerSecret" value="anonymous"/> >>>>>>>>>> <!-- Uncomment this key if you want to use v13 sandbox. --> >>>>>>>>>> <!-- <add key="LegacyAdWordsApi.Server" value=" >>>>>>>>>> https://sandbox.google.com"/> --> >>>>>>>>>> <!-- Uncomment this key if you want to use AdWords API >>>>>>>>>> sandbox. --> >>>>>>>>>> <add key="AdWordsApi.Server" value=" >>>>>>>>>> https://adwords-sandbox.google.com"/> >>>>>>>>>> >>>>>>>>>> As I understand it this is set up correctly, what am I missing? >>>>>>>>>> >>>>>>>>>> Any help would be very gratefully received!!! >>>>>>>>>> >>>>>>>>> -- =~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~ Also find us on our blog and discussion group: http://adwordsapi.blogspot.com http://groups.google.com/group/adwords-api =~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~ You received this message because you are subscribed to the Google Groups "AdWords API Forum" group. To post to this group, send email to [email protected] To unsubscribe from this group, send email to [email protected] For more options, visit this group at http://groups.google.com/group/adwords-api?hl=en
