Not getting survey info in an SurveyMonkey API call - surveymonkey

I'm trying to get the entered information on a survey of SurveyMonkey through the API. But i'm getting the following return message: "Could not validate access to survey at this time, please try again later.", with status 5 (System Error).
I'm working with a APP in Draft status. All the scopes in my app are put on optional. And other api calls (like get_survey_list) do give me data.
I'm working with php, but the API console (https://developer.surveymonkey.com/docs/api_console/) also gives me these results.
Is there an extra permission layer i'm missing? Do ppl need to approve something through oauth?

The API console is for V2 of the API (which is either deprecated, or likely to be deprecated soon), I would recommend using V3 (https://developer.surveymonkey.com/api/v3)
You can fetch the list of surveys using
GET /v3/surveys
And you can get a specific survey with
GET /v3/surveys/<id>
And follow down the path to get individual pages/questions, or if you want the entire survey expanded at once, use:
GET /v3/surveys/<id>/details
With regards to the request you are doing with API v2, I'd probably need a bit more information, if you are doing a POST with an empty body to get_survey_list and are getting that issue I'd probably contact their customer support to look into it as it looks like a server error. But I would recommend going to V3 and see if everything works fine for you.

Like the general posted, v3 works fine. Here is the code of my POC that works:
// GET USER
$requestHeaders = array(
'Content-Type: application/json',
'Authorization: Bearer [ACCESS_TOKEN]',
);
$url = 'https://api.surveymonkey.net/v3/users/me?api_key=[API_KEY]';
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_HTTPHEADER, $requestHeaders);
$result = curl_exec($ch);
curl_close($ch);
The above is the just a simple call to get the basic info of the user.
The next call get's the answers given in the responses that are given through a specific collector.
// GET THE ANSWERS OF THE SURVEY
$requestHeaders = array(
'Content-Type: application/json',
'Authorization: Bearer [ACCESS_TOKEN]',
);
$url = 'https://api.surveymonkey.net/v3/collectors/[COLLECTOR_ID]/responses/bulk?api_key=[API_KEY]';
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_HTTPHEADER, $requestHeaders);
$result = curl_exec($ch);
curl_close($ch);
You can also import the API into Postman. There is a button for this on the documentation site. Pretty nice :)

Related

Does an AccessToken also work on Open Data Calls like /search?

So, im working on an Application which compares your youtube channel Data with other similare youtube channels.
Currently im working on the authentication of an user with his youtube account, therefore im Using the OAuth Client.
I already got an code which i can exchange for an access_token, which also works.
Sadly, the access_token which i get does not work for an simple /search call and gives me an HTTP 400 -> keyinvalid
The same call works with an generated ApiKey just fine, but i would prefer to use OAutch.
My question is, does an accessToken not work with public calls like /search? If it does, what could be my problem here?
Thanks in Advance!
EDIT: Added Code Examples
Step 1: I call the OAuth client with the following url call in an new window with window.open(url)
https://accounts.google.com/o/oauth2/v2/auth?
scope=https://www.googleapis.com/auth/youtube.readonly&
access_type=offline&
include_granted_scopes=true&
state=state_parameter_passthrough_value&
redirect_uri=https://website.com/&
response_type=code&
client_id=9791...7bng.apps.googleusercontent.com"
In the Response I extract the Code which looks something like this
4/1QCLZnwsntp...sNcE
Send this code over an REST API to my Backend which uses this code to exchange it for an access_token with an PHP curl POST call
$this->connection = curl_init();
$url = 'https://www.googleapis.com/oauth2/v4/token';
$param = 'code='.$this->credentialsTemp['code'].'&client_id='.$GLOBALS['Youtube-Credentials']['clientId'].'&client_secret='.$GLOBALS['Youtube-Credentials']['clientSecret'].'&redirect_uri=https://website.com/&grant_type=authorization_code';
curl_setopt($this->connection, CURLOPT_URL, $url);
curl_setopt($this->connection, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($this->connection, CURLOPT_TIMEOUT, 20);
curl_setopt($this->connection, CURLOPT_POST,true);
curl_setopt($this->connection, CURLOPT_POSTFIELDS, $param);
$resp = curl_exec($this->connection);
curl_close($this->connection);
$acces_token = json_decode($resp,true)["access_token"];
in $acces_token should be my access_token which at the Moment looks close to this ya29.GlyTBtFMdLqKbvgaps...SA2pBORo_Am5UuBuxo8g

User Channels / Unknown Subresource

The newly added (05/02) User Channels resource seems to be dead. When I attempt to access this data I always receive an error that says "Unknown subresource channels".
Can anyone confirm that this functionality is actually working?
I've tried retrieving it a couple of different ways:
$channels = $this->client->chat
->services($this->ipmSid)
->users($memberId)
->channels
->read(); // I've also tried ->fetch();
and then I tried using the link that is provided when you fetch a member and feeding that directly into curl like this:
$member = $this->client->chat
->services($this->ipmSid)
->users($user_id)
->fetch();
$url = $member->links['user_channels'];
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($process, CURLOPT_USERPWD, $this->sid . ":" . $this->token);
$resp = curl_exec($ch);
Both ways result in a 500 error "Twilio Exception Unknown Subresource Channels".
Thanks for any tips!
It is not documented well. You need to use userChannels.
channels = $this->client->chat
->services($this->ipmSid)
->users($memberId)
->userChannels
->read();

EventBrite API - How Do I Get Only Live Events for my User?

I'm using PHP and CURL to try and get all my account's events from EventBrite's web service.
I'm running this script (edited down slightly):
$curl = curl_init();
$hdr = array();
$hdr[] = 'Authorization: Bearer <MY TOKEN>';
$hdr[] = 'Content-type: application/json';
curl_setopt($curl, CURLOPT_HTTPHEADER, $hdr);
curl_setopt(
$curl,
CURLOPT_URL,
'https://www.eventbriteapi.com/v3/users/me/owned_events/?status=live'
);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
$events = curl_exec($curl);
print_r($results);
But the status=live parameter is not taking effect and all events including drafts are being returned.
Has anyone successfully achieved a list of live events using EventBrite's API and if so, can you advise me how you managed and where I went wrong?
I'm unsure if I just helped you via email, but after troubleshooting I've deducted that this will only return 'live' events if you also pass in 'started' as a status parameter.
Ex.) 'https://www.eventbriteapi.com/v3/users/me/owned_events/?status=live,started'
I hope this helps!
For the benefit of anyone else with a similar problem, the issue was the "Content-Type" header. Remove this, and all is well with the world.

How can I get a unique identifier associated with a meetup access token?

I have implemented a simple api in python to get an OAuth2 access token from a user in meetup. How can I get a unique identifier from that user, using the access token, other than the token itself? For example, if I'm given an access token, how can I get that users email address?
You can make a call to https://api.meetup.com/2/member/self.
PHP example with cURL library:
$ch = curl_init();
//set the url, number of POST vars, POST data
curl_setopt($ch, CURLOPT_URL, 'https://api.meetup.com/2/member/self');
curl_setopt($ch, CURLOPT_HTTPHEADER, array(
'Authorization: bearer ' . $accessToken
));
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$result = curl_exec($ch);
curl_close($ch);
$userData = json_decode($result);
You can get the ID from the user like $userData->id. As far as I know E-mail is not provided by this API call, at least not as a default anyway.
according to the docs here: http://www.meetup.com/meetup_api/docs/2/member/#get you should ask for the e-mail address by passing in the "fields=email" request parameter and this will return the e-mail address only if the following conditions are met:
email: Member's email address, if requested in fields parameter. This item is
only included if the currently authenticated user is the founder of a
Meetup Everywhere in which the member has elected to share an email
address.

Getting feedburner subscriber count

Can someone tell me how can I get the feedburner subscribers count as text using php? I am trying the following, but it does not work as I think feedburner has changed the contents of the xml file.
Thanks for any help.
$whaturl="https://feedburner.google.com/api/awareness/1.0/GetFeedData?uri=USERNAME";
$ch = curl_init();
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_URL, $whaturl);
$data = curl_exec($ch);
curl_close($ch);
$xml = new SimpleXMLElement($data);
$fb = $xml->feed->entry['circulation'];
echo $fb;
Need to alter line 7 to:
$fb = $xml->feed->entry->attributes()->circulation;
//Much later edit
I actually have a couple of posts on my blog by now with code for fetching facebook / twitter / feedburner counts. Code with APC caching is here:http://www.glowingminds.co.uk/facebook-likes-twitter-follows-and-feedburner-count-in-php-with-curlsimplexml-deluxe/

Resources