youtube data api search by viewCount wrong results - youtube-data-api

When I start a GET request to https://youtube.googleapis.com/youtube/v3/search?part=snippet&channelId=*channelId*&order=viewCount&key=*apiKey* I am supposed to get the most viewed videos of the channel.
In the response's items array's first element is a 6 months old video with around 4k views.
On the channel's Youtube page if I sort by most viewed, the first one is 10 years old with 200k views.
Any idea why I do not get the correct results?
I double-checked, the channel id is correct.

Easy workaround:
Use my YouTube operationnal API, make a GET request to https://yt.lemnoslife.com/search?part=snippet&channelId=*channelId*&order=viewCount
A bit more complicated workaround:
curl -s 'https://www.youtube.com/youtubei/v1/browse?key=AIzaSyAO_FJ2SlqU8Q4STEHLGCilw_Y9_11qcW8' -H 'Content-Type: application/json' --data-raw '{"context":{"client":{"clientName":"WEB","clientVersion":"2.9999099"}},"browseId":"CHANNEL_ID","params":"EgZ2aWRlb3MYASAAMAE="}'
Don't forget to replace CHANNEL_ID with the channelId you want the most viewed videos from.
If you need more than the first 30 results, grab the continuation token from the response of the request above and use the following command (and if you're still interested for more results use the last continuation token you got):
curl -s 'https://www.youtube.com/youtubei/v1/browse?key=AIzaSyAO_FJ2SlqU8Q4STEHLGCilw_Y9_11qcW8' -H 'Content-Type: application/json' --data-raw '{"context":{"client":{"clientName":"WEB","clientVersion":"2.9999099"}},"continuation":"CONTINUATION_TOKEN"}'
Don't forget to replace CONTINUATION_TOKEN with the continuation token you got from the latest request reponse.
Note: don't pay attention to the key, it's not a Youtube Data API v3 key.

Related

Use of wrong HTTP verb while creating elasticsearch index

To create an index in the elasticsearch, we need to use the PUT verb, for example, the following command:
curl -X PUT "localhost:9200/test_index" -d '{"settings":{"number_of_shards":2, "number_of_replicas":2}}' --header 'Content-Type: application/json'
But according to RFC 2616, ยง 9.5, POST can be also used to create a resource.
Why POST is not suitable here or why did elasticsearch designer use PUT instead of POST?
I found some posts related to your question.
This answer from one of the ElasticSearch engineers might be helpful to you.
https://discuss.elastic.co/t/when-to-use-put-versus-post/68550/3

Refresh token response with missing elements of conversation object

I have been working with Direct Line for a long time, but I'm confused when refreshing tokens. I send a request like:
curl --location --request POST 'https://directline.botframework.com/v3/directline/tokens/refresh' --header 'Authorization: Bearer xxxxx'
And according to the documentation here, it should return a conversation object (described here), that should contain (amongs others) streamUrl and referenceGrammarId (as it does in generate token), but I don't get them in the response, I get just conversationId, token and expires_in, making it more difficult to handle the token refresh.
Is this the expected behavior, or those missing properties should be present?
Yes, it was the expected behavior, said the technical team at Microsoft.

Google calendar, get days with activities

Is it possible to get a list of dates (separated by day) with activities, sending time boundaries in the request.
For example:
request:
{
minDate: 'someMinDate',
maxDate: 'someMaxDate'
}
response:
{
datesWithActivities: [
'day1',
'day2',
'day3'
]
}
Based on the documentations, you should be able to use the list method:
https://developers.google.com/calendar/v3/reference/events/list
and use its timeMin and timeMax parameters.
Here are example requests with timeMin and timeMax set to '2016-05-18T07:00:00+07:00' and '2016-05-18T09:00:00+07:00' respectively:
curl \
'https://www.googleapis.com/calendar/v3/calendars/ariefbayu%40gmail.com/events?timeMax=2016-05-18T09%3A00%3A00%2B07%3A00&timeMin=2016-05-18T07%3A00%3A00%2B07%3A00&key=[YOUR_API_KEY]' \
--header 'Authorization: Bearer [YOUR_ACCESS_TOKEN]' \
--header 'Accept: application/json' \
--compressed
Activities in Google Calendar are called Events, and by requesting the events of the calendar using the list method, and passing the timeMax and timeMin parameters in the request you get events between the dates and times of your choosing.
To get the exact representation you want directly from the API response is not possible with existing methods, you would have to do that on your end.
But feel free to file a Feature Request at https://issuetracker.google.com
Further reading:
Calendar API: Events

Tricks to figure out how to login to Dexcom's API to get blood sugars?

Any way to figure out tricks to login to an API by Dexcom? This article discusses an approach for accessing blood sugar values but the first step is to log into the API and it is unclear how that step was taken as this is an undocumented API.
We are trying to help a diabetic get access to her blood sugar values so she can code new insulin dosing algorithms. (She wants to prevent the crashes and spikes in her blood sugars that ruin her days and put her at risk for blindness and being on dialysis. She believes and hopes human + machine can do better than her alone.)
If we are able to login the next steps for retrieving the values seem clear:
curl -k -X POST "https://share1.dexcom.com/ShareWebServices/Services/Publisher/ReadPublisherLatestGlucoseValues?sessionID=GUID&minutes=1440&maxCount=1" -H "Accept: application/json" -H "Content-Length: 0"
Is there anything to try that could give us a clue as to how take the first step and login to this API?
Open the Dexcom clarity website
In your browser (let's assume Chrome for now) open the developer tools and go to the "Network" tab
Select the "data" XHR call. This is the "hidden API call" that populates the graphs in the Dexcom Clarity.
Right click and select "Copy > Copy as CURL (bash)". That will give you the CURL code that authenticates and logs into the website.
(Optional) Take the CURL command and paste it to https://curl.trillworks.com/ to translate the CURL code into some
other language
curl 'https://clarity.dexcom.com/api/subject/1522320180078ZZZZZZ/analysis_session/1560634749054XXXXXXX/data' -H 'Origin: https://clarity.dexcom.com'
-H 'Accept-Encoding: gzip, deflate, br'
-H ..... -H 'Referer: https://clarity.dexcom.com/' -H --data-binary '{"localDateTimeInterval":["2016-05-01/2016-07-29"]}' --compressed
Notice that you can change the data range by changing the values passed at localDateTimeInterval and get access to the full data in the account at a resolution of 5-min measurements. The returned JSON also includes all other events, such as calibrations, etc.

How to I find all data from JSON POST request with curl

I am playing with the open data project at spogo.co.uk (sport england).
See here for a search example: https://spogo.co.uk/search#all/Football Pitch/near-london/range-5.
I have been using cygwin and curl to POST JSON data to the MVC controller. An example is below:
curl -i -X POST -k -H "Accept: application/json" -H "Content-Type: application/json; charset=utf-8" https://spogo.co.uk/search/all.json --data '{"searchString":"","address": {"latitude":55,"longitude":-3},"page":0}'
Question:
How can I find out what other variables can be included in the post data?
How can I return all results, rather than just 20 at a time? Cycling through page numbers doesn't deliver all at once.
AJAX is simply a technique of posting data over a connection asynchronously, JSON is just a string format that can contain data. Neither of which have built in mechanisms for querying information such as what fields are accepted or the amount of data returned.
You will want to check the web service documentation for on spogo.co.uk for these answers, IF their web service exposes such functionality they will be the final authority on what the commands and formats are.

Resources