Get multiple songs by foreing_ids - echonest

I'm building an spotify-echonest app using the web apis from both. I'm using spotify api to get as many songs as I can from user input, what I need now is to get information about these songs from echonest but as far as I can see you can only set one filter as foreing_id in the rest service.
http://developer.echonest.com/api/v4/artist/similar?api_key=YOUR_API_KEY&id=spotify:artist:4Z8W4fKeB5YxbusRsdQVPb&bucket=id:spotify
I'm using the Java API from Echonest, anyway any help is usefull.

You should query audio features from Spotify's Web API instead as Spotify doesn't support echonest anymore. I think you've already known how to get track IDs from the API, all you need to do is use the track IDs to query audio features.
Example:
Step 1: Get track id
curl -X GET "https://api.spotify.com/v1/search?q=track%3Anumb+artist%3Alinkin+park&type=track" -H "Accept: application/json"
Step 2: Get access token
curl H "Authorization: Basic YOUR_CLIENT_CREDENTIALS" -d grant_type=client_credentials https://accounts.spotify.com/api/token
Step 3: Get audio features
curl -X GET "https://api.spotify.com/v1/audio-features/YOUR_TRACK_ID" -H "Authorization: Bearer {YOUR_ACcess-TOKEN}"

Related

Understanding the GET/POST/DELETE requests on a basic level?

I'm currently learning to use REST API (from WooCommerce in this case) and got some basic questions:
How to see complete request string in Postman software?
I'm testing a simple GET request which works great with for example:
<host>/wp-json/wc/v3/products
to receive the product list. In this case I use the authorization tab to enter my user/pass as Basic Auth.
I also tested curl.exe using another simple Windows command prompt. This also returned product list:
curl.exe <host>/wp-json/wc/v3/products -u mykey:mysecret
What is the difference between them? The last example is a simple GET, i assume, although it's not stated. How about POST or DELETE etc? This is what i don't understand: A https request can only have an address and eventual parameters. Where and how does "GET" come into the picture?!
If possible, I would like the see the complete URL request (as one string) from the working Postman example?
My last question is about testing the same method on another server/service which is not WooCommerce. Afaik this service is created with something called swagger:
curl "<host>/orderapi/item" -H "accept: application/json" -H "X-Customer: <customer>" -H "X-ApiKey: <mykey>" -H "X-ApiSecret: <mysecret>" -H "Content-Type: application/json"
This also returns a list of, in this case orders instead of products. All good.
But for this example I haven't figured out how to achieve the same request in Postman. What auth method should I use?
And again, I don't understand the GET/POST/DELETE thing. And I also would like to see the complete request as one-string.
1) How to see complete request string in Postman software? I would like the see the complete URL request (as one string) from the working Postman example
On version 9.x.x:
The code window(image) shows the choosen method (yellow mark) and the code window(red arrow), where you get the actual
curl code(image)
2) What is the difference between them? The last example is a simple GET, i assume, although it's not stated. How about POST or DELETE etc? Where and how does "GET" come into the picture?
From the curl documentation:
-X, --request
(HTTP) Specifies a custom request method to use when communicating
with the HTTP server. The specified request method will be used
instead of the method otherwise used (which defaults to GET). Read the
HTTP 1.1 specification for details and explanations. Common additional
HTTP requests include PUT and DELETE, but related technologies like
WebDAV offers PROPFIND, COPY, MOVE and more.
GET is the default method for curl, which means:
curl.exe <host>/wp-json/wc/v3/products -u mykey:mysecret
is the same as:
curl.exe <host>/wp-json/wc/v3/products -u mykey:mysecret -X "GET"
so, for a POST/DELETE/... you should change your '-X' parameter for example:
curl.exe <host>/wp-json/wc/v3/products -u mykey:mysecret -X "POST" [...otherOptions]
(Assuming that you can receive a POST on the url above)
3) [On another server/service] I haven't figured out how to achieve the same request in Postman. What auth method should I use?
The -H specify the header parameter you are passing. You have those in your example:
accept: application/json
X-Customer:
X-ApiKey:
X-ApiSecret:
Content-Type: application/json
You need to add those in your postman on the headers(image) tab. In this case you don't need to specify a auth method, once you're sending the ApiKey on the header. In addition to that, you can specify the authorization Type to be "Api Key" and put X-ApiKey as key and your apikey value on the value field(image). It'll generate the same request as shown in the headers image.
curl, at least the GNU one on Linux, uses GET method by default. If you want to change a HTTP method in your request, there's -X option, for example:
$ curl -X DELETE https://example.com
Postman has something called Postman Console which you can open by pressing Alt + Ctrl + C:
and where you can see more details about requests and responses.
Postman also lets you import curl commands, so you don't need to manually prepare the request, you can only paste the curl command in Postman.
There are many resources online on the specifics, e.g. how to import a curl command.

How to get count of followers through Github API?

I want to get count of my followers when each time the page loads.
The endpoint I found is api.github.com/users/tim-hub/followers, which can get all followers data (with pagination).
What the problems are (through restful api)
I do not need the followers details
Pagination is like 30 items each page, which makes it hard to count all of them
I am thinking about to fetch a page , i.e. page 4 ?page=4, and do a simple calculation 30*(4-1)+[count of page 4], but it means it will call multiple times, because the followers are changing, if it increases or decreases, I have to call to page 5 or page 3. and loop it until find the last page.
Why not GraphQL
GraphQL api seems like can be used to get the count, what the problem is that I want to call this through front-end, and Graph way requires authentication, I do not want to share my persona token to all.
Similarely to "How to find my organization Id over github?", you can use the GitHub user API to isolate the followers number.
curl -H "Accept: application/json" https://api.github.com/users/aUser | jq ".followers"
In my case:
curl -H "Accept: application/json" https://api.github.com/users/VonC| jq ".followers"
179
For a GraphQL-based solution, see "Github API - Find number of followers for all my followers".

Expose Play Framework rest calls secured via securesocial to mobile app

I would like to expose my Play Framework REST calls to clients other than my play app.
I would like a mobile app to call those secured rest calls.
I asked a question on SO earlier in the year and got an answer but this only works for OAuth2 and I am only using OAuth1
My questions are:
Is exposing my REST calls secured by Securesocial on my PlayFramework app to non web clients like Mobile apps a good idea?
Is there a way to do this using Securesocial for OAuth1?
Are there any examples apart from the one in the link from my last question?
Latest changes in master-SNAPSHOT include a LoginApi controller that lets you authenticate a user using an API. It supports the UsernamePasswordProvider and all the OAuth2Providers.
In the case of the UsernamePasswordProvider you can post the user credentials and if they’re ok you will get a json with a token that can be used in an X-Auth-Token header to invoke SecuredActions. For example:
curl --data "username=some#email.com&password=some_password” http://localhost:9000/auth/api/authenticate/userpass
For OAuth2 based providers you have to post a JSON with an accessToken generated by the external service (that was obtainer in the client side) along with the user email. The module will use the accessToken to verify if it works and will compare the email returned by the external service to the one passed in. If they match then the user is considered to be authenticated. This is very similar to what the guys at FortyTwo were doing and I thought it would be good to have the functionality built in (http://eng.42go.com/mobile-auth-with-play-and-securesocial/).
For example, having a file test.json with the accessToken and expiresIn values returned after authenticating with Facebook on the client side (e.g.: using Javascript):
{
"email": “some#email.com”,
"info": {
"accessToken": “an_access_token”,
"expiresIn": a_number_with_expiration_in_seconds
}
}
You can invoke:
curl -v --header "Content-Type: application/json" --request POST --data-binary "#test.json" http://localhost:9000/auth/api/authenticate/facebook
A sample json response for any of the calls above would be:
{"token":"98b9613dac60890b8e0abf5bc0f77591523df4e6de50b085c832116b8db2cc65511e0de6780f6a49f8755eddabbd46e6afada92160758fd6d4bbb25dc57e0f7b1e4b5b59fbbe543cf80ad1b6d91de7764e3ac1aaa0afac0c312a47bf27258f455606c6c19b1a3d40f8631ce98e6b76e128dddcb29511eb81200ffe9de95cba7a","expiresOn":"2014-05-07T07:43:10.987-03:00"}
You can then invoke a secured action as:
curl -v --header "Content-Type: application/json" -H "X-Auth-Token: 819a9cb9227d2c82af9c1ee2a62b9e7d35725e235e086ab95ecce0b509f3f7b389f430e217e341306ecaebfd1972ac083de73a32341a26f97150ae71fb0417f0031534d818356b2266ffc100e5ee6a50bd1f9ec76b0f68d2ff8ce4d196b4a86b61e002b29b00532ef166cb2eb8476d3ae008c112891628bc0f444c7512c01345" http://localhost:9000/my-protected-action
I recommend to use Silhouette (repo). Silhouette was designed to be flexible.
Here you can find a seed project using Silhouette that expose a rest api for signup, singin and social authentication.

How do I add a relation to my parse.com object using the REST API?

I have two classes, the standard User and my custom class Story.
Every User can have one or more Story. I can save a new User, I can save a new Story (from my .net application using parse.com REST API), but how do I create a relation between them?
I see this example in the documentation:
curl -X PUT \
-H "X-Parse-Application-Id: MY APP KEY" \
-H "X-Parse-REST-API-Key: MY REST KEY" \
-H "Content-Type: application/json" \
-d '{"User":{"__op":"AddRelation","objects":[{"__type":"Pointer","className":"_User","objectId":"Vx4nudeWn"}]}}'
https://api.parse.com/1/classes/Story/Ed1nuqPvcm
How do I "put" this in using POSTMAN (chrome addon) for instance? What is "-d" in this case, it doesnt seem to be a normal url parameter?
Thanks!
I'm not sure but it seems you have a double question there. The first one, on how to create a parse relation via rest api, you answered with the curl example.
About using postman, you can specify the json content under the raw tab (check the image bellow). Also make sure the content type is set to JSON (application/json), in the blueish dropdown next to the tabs.
I've tested and worked fine. Hope it helps.
Cheers.

Can I change a date on shopify blog using api?

I must be brief, not much time left...
I'm trying to backdate some blog posts that were written in the run-up to our store launch.
I'm using curl from the command line and I can POST new blog articles, and I can PUT changes to existing blog articles, but I can't adjust the date of the existing articles yet.
Can you help me?
Thanks!
Here's my curl request...
curl -i -H "Content-Type: application/json" -H "Accept: application/json" -X PUT -d '{ "article": {"id": xxxxxx, "created_at": "2012-08-25"}}' https://key:passwordlongstringhere#storename.myshopify.com/admin/blogs/#blogID/articles/#articleID.json
And yes, all the appropriate xxxx and #blogID have the right info in my request.
Created at dates can not be set through the API or admin.
The created_at field is read-only, as mentioned by John. However, you can change the published_at date to backdate the post as you desire.
The connection will fail with "curl: (35) Unknown SSL protocol error in connection to shopname.myshopify.com:443" unless you add --sslv3 to the curl parameters. I have successfully used your example with this parameter to change the published date on a blog post via the api.