Related
Does anybody have experience using Strapi.io and combine it with Codeigniter.
I have difficult when i need to make JSON in my controller same like strapi needed.
My JSON look like below
string(102) "{"id":"3","Name":"Paket Anak-anak","Description":"Loren ipsum","Price":"11000","Image":"Capture3.PNG"}"
Whilist what Strapi need to POST request
kind of like below
{
"data": [
{
"id": 2,
"attributes": {
"Name": "Paket Medium",
"Description": "Loren ipsum qqiqqfqqv",
"Price": 120000,
"Image": null,
"createdAt": "2022-09-17T05:44:18.713Z",
"updatedAt": "2022-09-17T05:44:20.723Z",
"publishedAt": "2022-09-17T05:44:20.720Z"
}
}
],
}
If I make a curl request for this URL:
https://www.googleapis.com/youtube/v3/channels?part=snippet%2CcontentDetails%2Cstatistics&id=UC_x5XG1OVP6uZZ5FSM9Ttw&key=...
I'll get the output as:
{
"kind": "youtube#channelListResponse",
"etag": "J801W-IQ15sDpy3GjDfjlUgoVxA",
"pageInfo": {
"resultsPerPage": 0
}
}
Does this mean that the YouTube channel doesn't exist?
I don't get any error; how to find whether this is a valid channel or not?
Likewise, I want the list of videos of a given channel. If I make a curl request using this URL:
https://www.googleapis.com/youtube/v3/search?part=snippet&channelId=UCIJIhBwx4XjNUtQGZTGSVnA&maxResults=20&order=date&key=[YOUR_API_KEY]
I'll get the output as:
{
"kind": "youtube#searchListResponse",
"etag": "q5r0QewUnrg2C7BdwuxbJxb9b8c",
"regionCode": "IN",
"pageInfo": {
"totalResults": 0,
"resultsPerPage": 20
},
"items": []
}
This is a valid channel ID, but I get an empty result, not an error; how to know the search is valid or not?
Question no. 1
For what concerns your first question:
Given a channel ID -- $CHANNEL_ID --, test whether the respective channel exists or not.
I would recommend invoking curl on the following URL:
https://www.googleapis.com/youtube/v3/channels?part=id&fields=items/id&id=$CHANNEL_ID&key=$APP_KEY
Note that invoking the Channels.list endpoint through the URL above -- which contains the parameters part=id and fields=items/id -- will return only the channel's ID.
Although not documented explicitly, tests show that you'll get back from the endpoint the ID you passed on to it, if and only if that channel does actually exist.
For example, in case of your channel ID above -- UC_x5XG1OVP6uZZ5FSM9Ttw --, the API response is trivially empty:
{}
becase this channel does not exist (only have to click on this link to see that yourself).
On the other hand, in case of NBCNews' channel -- UCeY0bbntWzzVIaj2z3QigXg -- the response is:
{
"items": [
{
"id": "UCeY0bbntWzzVIaj2z3QigXg"
}
]
}
showing that indeed this channel is live and kicking.
Question no. 2
For what concerns the second question of your post:
Given a channel by its ID $CHANNEL_ID, do list the videos of that channel.
I recommend you to consult the answer I gave recently to this very question.
In terms of curl, you'll have to invoke the following URL:
https://www.googleapis.com/youtube/v3/channels?part=contentDetails&fields=items/contentDetails/relatedPlaylists/uploads&id=$CHANNEL_ID&key=$APP_KEY
for to obtain that channel's uploads playlist ID. For example, in the case of NBCNews' channel, the API response is:
{
"items": [
{
"contentDetails": {
"relatedPlaylists": {
"uploads": "UUeY0bbntWzzVIaj2z3QigXg"
}
}
}
]
}
Then take out that ID from the JSON response as $PLAYLIST_ID and invoke curl on the following URL repeatedly, implementing pagination:
https://www.googleapis.com/youtube/v3/playlistItems?part=id,snippet,contentDetails,status&maxResults=50&playlistId=$PLAYLIST_ID&key=$APP_KEY.
In case of NBCNews' uploads playlist, the output of the first page would look like:
{
"kind": "youtube#playlistItemListResponse",
"etag": "5DW9uT73DWmJtDoJ-rSw3AqHKpc",
"nextPageToken": "CAUQAA",
"items": [
{
"kind": "youtube#playlistItem",
"etag": "_X3LvLIRvEBM3RetizOGtB03ja0",
"id": "VVVlWTBiYm50V3p6VklhajJ6M1FpZ1hnLjE5NjU4N0NGQkY5M0M3MjI=",
"snippet": {
"publishedAt": "2020-09-12T06:11:59Z",
"channelId": "UCeY0bbntWzzVIaj2z3QigXg",
"title": "Watch NBC News NOW Live - September 11",
"description": "NBC News NOW is live, reporting breaking news and ...",
"thumbnails": {
...
},
"channelTitle": "NBC News",
"playlistId": "UUeY0bbntWzzVIaj2z3QigXg",
"position": 0,
"resourceId": {
"kind": "youtube#video",
"videoId": "yXO2hQXC5Dw"
}
},
"contentDetails": {
"videoId": "yXO2hQXC5Dw",
"videoPublishedAt": "2020-09-12T06:11:59Z"
},
"status": {
"privacyStatus": "public"
}
},
{
"kind": "youtube#playlistItem",
"etag": "PGyhZonOjiRzqHu7DKDPk6gcMTo",
"id": "VVVlWTBiYm50V3p6VklhajJ6M1FpZ1hnLjY2RTJFNDA4MDA0NDREQTU=",
"snippet": {
"publishedAt": "2020-09-12T02:48:48Z",
"channelId": "UCeY0bbntWzzVIaj2z3QigXg",
"title": "Gaza Sees Spike In Coronavirus Cases, Severe Shortage Of Supplies | NBC News NOW",
"description": "NBC News’ Kelly Cobiella reports on the surge in Gaza ...",
"thumbnails": {
...
},
"channelTitle": "NBC News",
"playlistId": "UUeY0bbntWzzVIaj2z3QigXg",
"position": 1,
"resourceId": {
"kind": "youtube#video",
"videoId": "I0lHV0ZVPAs"
}
},
"contentDetails": {
"videoId": "I0lHV0ZVPAs",
"videoPublishedAt": "2020-09-12T02:48:48Z"
},
"status": {
"privacyStatus": "public"
}
},
...
],
"pageInfo": {
"totalResults": 20000,
"resultsPerPage": 50
}
}
Do notice the property nextPageToken within the JSON response text above; the value of this property -- CAUQAA -- would have to be passed to the second invocation of the endpoint as the parameter pageToken=CAUQAA added to the initial URL above.
For to obtain the n-th page, you'll extract the value of nextPageToken from the n-1-th page, for to pass that value to the the n-th URL as pageToken=....
There is no request in the API that will tell you 100% if a channel exits or not.
Even doing a do a video search for the channel wont help you as. If it exists then it would return the videos for that channel, if not then you get back 0 videos.
request
curl \
'https://www.googleapis.com/youtube/v3/search?part=snippet&channelId=UCMPpVtxOI8RtfurfvCcxgyA&order=date&key=[YOUR_API_KEY]' \
--header 'Accept: application/json' \
--compressed
response
{
"kind": "youtube#searchListResponse",
"etag": "oaf4zpPSG6Ho_cSxZedNhuVhjkw",
"nextPageToken": "CAUQAA",
"regionCode": "DK",
"pageInfo": {
"totalResults": 1721,
"resultsPerPage": 5
},
"items": [
no channel
In the event no channel exists the above code will return total results of 0
{
"kind": "youtube#searchListResponse",
"etag": "opQHhlM-mBA_i0h80B_gmHdKgCE",
"regionCode": "DK",
"pageInfo": {
"totalResults": 0,
"resultsPerPage": 5
},
"items": []
}
Another option
Another option would be to not use the API at all. Just make a call to against YouTube itself.
If you load this page it loads the actual channel https://www.youtube.com/c/NBCNews However if you try to load https://www.youtube.com/c/lafjdajdskfadkfj it redirects you to https://www.youtube.com/error?src=404 i would think that would be something simple to detect.
Hey,
I wanted to know that I am using an API, That API gives me the news in JSON format. Now I am making a Website that will have all those news. I cannot parse this JSON DATA, This is the URL that contains this data.
JSON LINK
{
"status": "ok",
"totalResults": 20,
"articles": [
{
"source": {
"id": "the-new-york-times",
"name": "The New York Times"
},
"author": "http://www.nytimes.com/by/jonah-engel-bromwich, https://www.nytimes.com/by/vanessa-friedman, https://www.nytimes.com/by/matthew-schneier",
"title": "Kate Spade, American Designer, Is Dead at 55",
"description": "Ms. Spade was discovered in her apartment in Manhattan.",
"url": "https://www.nytimes.com/2018/06/05/fashion/kate-spade-dead.html",
"urlToImage": "https://static01.nyt.com/images/2018/06/06/fashion/06spade/06spade-facebookJumbo.jpg",
"publishedAt": "2018-06-05T17:00:36Z"
},
{
"source": {
"id": "the-washington-post",
"name": "The Washington Post"
},
"author": "https://www.facebook.com/amber.j.phillips",
"title": "Paul Manafort could now be in even more trouble. That should worry Trump.",
"description": "More legal pressure on Manafort=more chance he'll flip in the Russia investigation.",
"url": "https://www.washingtonpost.com/news/the-fix/wp/2018/06/05/paul-manafort-could-now-be-in-even-more-trouble-that-should-worry-trump/",
"urlToImage": "https://www.washingtonpost.com/resizer/0YVxgDU7BlAuRmQ80mc3miYo5CI=/1484x0/arc-anglerfish-washpost-prod-washpost.s3.amazonaws.com/public/J3ICKYJOMQ6CNHGVZIHSRNPL7Y.jpg",
"publishedAt": "2018-06-05T16:51:02Z"
},
{
"source": {
"id": "reuters",
"name": "Reuters"
},
"author": "Laila Bassam",
"title": "Exclusive: In Syria, a Russian move causes friction with Iran-backed forces - officials",
"description": "A Russian troop deployment in Syria near the Lebanese border this week caused friction with Iran-backed forces including Hezbollah which objected to the uncoordinated move, two non-Syrian officials in the regional alliance backing Damascus said.",
"url": "https://www.reuters.com/article/us-mideast-crisis-syria-russia-deploymen/exclusive-in-syria-a-russian-move-causes-friction-with-iran-backed-forces-officials-idUSKCN1J125S",
"urlToImage": "https://s4.reutersmedia.net/resources_v2/images/rcom-default.png",
"publishedAt": "2018-06-05T16:20:59Z"
},
{
"source": {
"id": null,
"name": "Nbcsports.com"
},
"author": "https://www.facebook.com/RoobCSN/",
"title": "White House drama could have destroyed other teams … but not these Eagles",
"description": "All this White House drama could have destroyed other teams, but unity is what makes these Eagles so special. By Reuben Frank",
"url": "https://www.nbcsports.com/philadelphia/eagles/white-house-drama-could-have-destroyed-other-teams-not-these-eagles",
"urlToImage": "https://www.nbcsports.com/philadelphia/sites/csnphilly/files/2018/06/05/us_eagles_link_arms.jpg",
"publishedAt": "2018-06-05T16:17:21Z"
},
{
"source": {
"id": "newsweek",
"name": "Newsweek"
},
"author": "Marie Solis",
"title": "Bill Clinton Says He Got 'Hot Under the Collar' Answering Questions About Monica Lewinsky and #MeToo",
"description": "Bill Clinton said he got \"hot under the collar\" when he answered questions about Monica Lewinsky on the Today show.",
"url": "http://www.newsweek.com/bill-clinton-backpedals-monica-lewinsky-remarks-says-he-supports-metoo-959426",
"urlToImage": "http://s.newsweek.com/sites/www.newsweek.com/files/styles/full/public/2018/06/05/bill-clinton.jpg",
"publishedAt": "2018-06-05T16:15:00Z"
},
{
"source": {
"id": "cnn",
"name": "CNN"
},
"author": "Kevin Liptak, CNN",
"title": "Putin says he and Trump speak 'regularly.' Here's how often that is.",
"description": "Russian President Vladimir Putin said Tuesday he speaks \"regularly\" with President Donald Trump.",
"url": "https://www.cnn.com/2018/06/05/politics/trump-putin-obama-phone-calls/index.html",
"urlToImage": "https://cdn.cnn.com/cnnnext/dam/assets/170723124529-putin-trump-split-0723-super-tease.jpg",
"publishedAt": "2018-06-05T16:15:00Z"
},
{
"source": {
"id": null,
"name": "Latimes.com"
},
"author": "Associated Press",
"title": "Only a few of Guatemala volcano's dead have been identified",
"description": "Guatemalan authorities put the death toll at 69, but officials said just 17 had been identified so far because the intense heat of the volcanic debris flows left most bodies unrecognizable.",
"url": "http://www.latimes.com/world/la-fg-guatemala-volcano-20180605-story.html",
"urlToImage": "http://www.latimes.com/resizer/FbXh2zEF9Xm-uOiMCjQzve_4AQ0=/1200x0/www.trbimg.com/img-5b16ab3a/turbine/la-fg-guatemala-volcano-20180605",
"publishedAt": "2018-06-05T15:32:55Z"
},
{
"source": {
"id": "newsweek",
"name": "Newsweek"
},
"author": "Jason Lemon",
"title": "Crocodile Jumped Out Of Water And Killed Ethiopian Pastor During Baptism",
"description": "Fishermen and members of the congregation did their best to help Docho Eshete, a Protestant pastor.",
"url": "http://www.newsweek.com/crocodile-kills-pastor-baptism-ethiopia-959325",
"urlToImage": "http://s.newsweek.com/sites/www.newsweek.com/files/styles/full/public/2018/06/05/gettyimages-481847798.jpg",
"publishedAt": "2018-06-05T15:14:00Z"
},
{
"source": {
"id": "business-insider",
"name": "Business Insider"
},
"author": "John Haltiwanger",
"title": "Police swarmed the home of high school shooting survivor and gun safety advocate David Hogg after prank phone call",
"description": "The home of David Hogg, a survivor of the shooting at Marjory Stoneman Douglas High School, was \"swatted\" on Tuesday after a prank phone call told law enforcement there was a hostage situation at the residence.",
"url": "http://www.businessinsider.com/home-of-gun-safety-activist-david-hogg-swatted-after-prank-call-2018-6",
"urlToImage": "http://static.businessinsider.com/image/5b16a7e81ae66255008b4890-750.jpg",
"publishedAt": "2018-06-05T15:11:04Z"
},
{
"source": {
"id": "the-wall-street-journal",
"name": "The Wall Street Journal"
},
"author": "Lingling Wei",
"title": "China Offers to Buy Nearly $70 Billion of US Products to Fend Off Trade Tariffs",
"description": "China offered to purchase nearly $70 billion of U.S. farm and energy products if the Trump administration abandons threatened tariffs, according to people briefed on the latest negotiations with American trade officials.",
"url": "https://www.wsj.com/articles/china-offers-to-buy-nearly-70-billion-of-u-s-farm-and-energy-products-1528208835",
"urlToImage": "https://si.wsj.net/public/resources/images/B3-AR363_CHINAU_SOC_20180605101801.jpg",
"publishedAt": "2018-06-05T15:02:00Z"
},
{
"source": {
"id": "the-washington-post",
"name": "The Washington Post"
},
"author": null,
"title": "Actually, Melania, your disappearance is a legitimate news story",
"description": "The first lady’s office calls the news media ‘rabid’ for wondering why she has dropped out of sight.",
"url": "https://www.washingtonpost.com/lifestyle/style/actually-melania-your-disappearance-is-a-legitimate-news-story/2018/06/05/99294790-6813-11e8-9e38-24e693b38637_story.html",
"urlToImage": "https://www.washingtonpost.com/resizer/nNEjVK-l32KhAFz0TwAxab3sCYI=/1484x0/arc-anglerfish-washpost-prod-washpost.s3.amazonaws.com/public/GDRD6ODIKAI6RHRYETTJHM4GG4.jpg",
"publishedAt": "2018-06-05T14:56:58Z"
},
{
"source": {
"id": "the-washington-post",
"name": "The Washington Post"
},
"author": null,
"title": "I saw what Maria did to Puerto Rico's hospitals. The death toll is no surprise.",
"description": "Medical care, like everything else on the island, was virtually shut down after the storm.",
"url": "https://www.washingtonpost.com/news/posteverything/wp/2018/06/05/i-saw-what-maria-did-to-puerto-ricos-hospitals-the-death-toll-is-no-surprise/",
"urlToImage": "https://www.washingtonpost.com/resizer/cJ_w2hZJoT_niJfT-Lxfa4U5Yx0=/1484x0/arc-anglerfish-washpost-prod-washpost.s3.amazonaws.com/public/TM73JYEI2U36JHWOE5XHRJPLH4.jpg",
"publishedAt": "2018-06-05T14:36:24Z"
},
{
"source": {
"id": null,
"name": "Startribune.com"
},
"author": "Paul Walsh",
"title": "W. Minnesota woman's obit takes dark turn over long-ago extra-marital affair",
"description": "\"She will not be missed,\" said brief notice that grabbed international attention.",
"url": "http://www.startribune.com/w-minnesota-woman-s-obit-takes-dark-turn-over-long-ago-extra-marital-affair/484588991/",
"urlToImage": "http://stmedia.stimg.co/KATHLEEN+OBIT.JPG?h=630&w=1200&fit=crop&bg=999&crop=faces",
"publishedAt": "2018-06-05T14:32:35Z"
},
{
"source": {
"id": "the-new-york-times",
"name": "The New York Times"
},
"author": "Adam Nagourney",
"title": "California Primary Election Live Updates: Democrats Play for GOP-Held Seats",
"description": "This is a big Election Day in California, and the country is watching.",
"url": "https://www.nytimes.com/2018/06/05/us/politics/california-primary-elections-live.html",
"urlToImage": "https://static01.nyt.com/images/2018/06/06/us/06cal-briefing01sub/06cal-briefing01sub-facebookJumbo.jpg",
"publishedAt": "2018-06-05T14:19:30Z"
},
{
"source": {
"id": "the-washington-post",
"name": "The Washington Post"
},
"author": "https://www.facebook.com/jhohmann",
"title": "David Koch is leaving Koch Industries, stepping down from Americans for Prosperity",
"description": "His departure will change the makeup of one of the most active and well-funded political forces in the country that has been a bulwark in supporting Republicans.",
"url": "https://www.washingtonpost.com/news/powerpost/wp/2018/06/05/david-koch-is-leaving-koch-industries-stepping-down-from-americans-for-prosperity/",
"urlToImage": "https://www.washingtonpost.com/resizer/8_T_AplMQkWlnCKY1YjV5ZUcTpM=/1484x0/arc-anglerfish-washpost-prod-washpost.s3.amazonaws.com/public/NLFV5JNECY5THCNBBHUHUBCWJI.jpg",
"publishedAt": "2018-06-05T13:52:25Z"
},
{
"source": {
"id": null,
"name": "Cnet.com"
},
"author": "Jessica Dolcourt",
"title": "iOS 12: Siri Shortcuts, group FaceTime and 'Memoji' Animoji of you",
"description": "Everything Apple announced for the iPhone and iPad.",
"url": "https://www.cnet.com/how-to/ios-12-siri-group-facetime-memoji-and-more/",
"urlToImage": "https://cnet4.cbsistatic.com/img/3R5HtavVDjD49BYit44jLYHx2TQ=/670x503/2018/06/04/b5fcbc71-cc14-4997-8d6b-258849f7c955/2018-06-04-10-55-39.jpg",
"publishedAt": "2018-06-05T13:09:11Z"
},
{
"source": {
"id": null,
"name": "Charlotteobserver.com"
},
"author": "Ron Gallagher",
"title": "FBI joins search for baby as focus shifts to eastern NC for girl abducted by sex offender",
"description": "The case of Emma Grace Kennedy, a 7-month-old girl abducted Sunday from Virginia, took a strange twist Tuesday when police suspected a man reportedly trying to sell a baby in Durham, NC, might have been Carl Ray Kennedy, a convicted sex offender who police sa…",
"url": "http://www.charlotteobserver.com/latest-news/article212475059.html",
"urlToImage": "http://www.charlotteobserver.com/latest-news/yex0df/picture212552209/alternates/LANDSCAPE_1140/grace.png",
"publishedAt": "2018-06-05T12:48:40Z"
},
{
"source": {
"id": "usa-today",
"name": "USA Today"
},
"author": "Erin Jensen",
"title": "Miss America axes swimsuit competition; Gretchen Carlson says 'We are no longer a pageant'",
"description": "Gretchen Carlson, Miss America Organization Board of Trustees Chair, had a major announcement on Tuesday's \"Good Morning America\": There will be no more swimsuit competition going forward.",
"url": "https://www.usatoday.com/story/life/tv/2018/06/05/miss-america-swimsuit-competition-gretchen-carlson/672148002/",
"urlToImage": "https://www.gannett-cdn.com/-mm-/d2d65a8ee91f20a09714e3a6a6550e1c79d7cc4a/c=0-593-2143-1804&r=x1683&c=3200x1680/local/-/media/2018/06/05/USATODAY/USATODAY/636637819845616797-GTY-954664126-99625691.JPG",
"publishedAt": "2018-06-05T12:23:00Z"
},
{
"source": {
"id": "the-washington-post",
"name": "The Washington Post"
},
"author": "https://www.facebook.com/TomJackmanWP/",
"title": "Did LA police and prosecutors bungle the Bobby Kennedy assassination probe?",
"description": "Critics believe the police and prosecutors ignored evidence of two gunmen and pinned the case on Sirhan, leading Kathleen Kennedy Townsend to join calls for a new investigation.",
"url": "https://www.washingtonpost.com/news/true-crime/wp/2018/06/05/did-l-a-police-and-prosecutors-bungle-the-bobby-kennedy-assassination/",
"urlToImage": "https://www.washingtonpost.com/resizer/pOEENliV3eaP6uNcu5Ya1xq17D0=/1484x0/arc-anglerfish-washpost-prod-washpost.s3.amazonaws.com/public/RA4727Y34Q4WVDJNYH47G3QEIM.JPG",
"publishedAt": "2018-06-05T09:07:18Z"
},
{
"source": {
"id": null,
"name": "Npr.org"
},
"author": "",
"title": "In Narrow Opinion, Supreme Court Rules For Baker In Gay Rights Case",
"description": "The Supreme Court on Monday ruled that a local baker in Colorado was within his rights to refuse to bake a cake for a same-sex couple's wedding, but it did not go beyond this case.",
"url": "https://www.npr.org/2018/06/04/605003519/supreme-court-decides-in-favor-of-baker-over-same-sex-couple-in-cake-shop-case",
"urlToImage": "https://media.npr.org/assets/img/2018/06/04/ap_17312739950081_wide-bec75df27909bee8722ae7c351074cc1e1157801.jpg?s=1400",
"publishedAt": "2018-06-05T01:22:31Z"
}
]
}
And My Php code is decoding this data to an array and then after that, I couldn't separate the objects and arrays. I know how much results i have and i can simply loop through it but i need to know how do i get that data .
<?php
$json = file_get_contents('https://newsapi.org/v2/top-headlines?country=us&apiKey=5d0d49e595dc4b64a2fd3916b617ad8c');
print_r( json_decode($json, true));
$jsons= ( json_decode($json, true));
echo $jsons[0]["article"];
?>
Your PHP code is wrong, echo $jsons[0]["article"];. - This will not work.
You need to replace it with print_r( $jsons["articles"][0] );. Therefore, I think what you mean by JSON DATA is how you roll it out or going through the data.
Because you have set the assoc parameter to true, json_decode() will return an array.
First a correction to your code that hopefully help you to understand how json and array() works.
$json = file_get_contents('https://newsapi.org/v2/top-headlines?country=us&apiKey=5d0d49e595dc4b64a2fd3916b617ad8c');
print_r( json_decode($json, true));
$jsons= ( json_decode($json, true));
print_r( $jsons["articles"][0] );
echo $jsons["articles"][0]['title'];
In this example we will roll out all articles.
$json = file_get_contents('https://newsapi.org/v2/top-headlines?country=us&apiKey=5d0d49e595dc4b64a2fd3916b617ad8c');
$news = json_decode($json, true);
foreach ($news["articles"] as $i => $article) {
echo '<h2>' . $article['title'] . '</h2>';
echo '<img src="' . $article['urlToImage'] . '"/>';
echo '<p>Published on ' . $article['publishedAt'] . '</p>';
echo '<p>' . $article['description'] . '</p>';
echo 'Read more';
}
You may also want to see array() at w3schools.com.
$jsons is not an array, but an object. What you want is $jsons->articles[0].
I'm currently using a spider to crawl through reddit and provide me with links and titles in json format. However, when the json file is created the data is stored as individual arrays as shown here:
[{"url": ["http://i.imgur.com/1Pw3ehZ.jpg"], "title": ["Sunset in Trinidad, CA", "bungholesex"]},
{"url": ["http://i.imgur.com/neQiFcf.jpg"], "title": ["Humboldt Bay, Eureka California", "bungholesex"]},
{"url": ["http://imgur.com/dxKHGLV"], "title": ["Crater Lake, Oregon in April", "CausticRain11"]},
{"url": ["http://imgur.com/RPv475F"], "title": ["South Dakota is seriously beautiful.", "ratt1601"]},
{"url": ["http://imgur.com/oH1u7nk"], "title": ["The view outside my back door. Virginia is alright, I guess...", "toowhitetofail"]},
Whenever I go to retrieve and echo the data converted with json_decoder I receive a notice saying "array to string conversion" but there is no data shown.
Try this code:
$data = '[{"url": ["http://i.imgur.com/1Pw3ehZ.jpg"], "title": ["Sunset in Trinidad, CA", "bungholesex"]},
{"url": ["http://i.imgur.com/neQiFcf.jpg"], "title": ["Humboldt Bay, Eureka California", "bungholesex"]},
{"url": ["http://imgur.com/dxKHGLV"], "title": ["Crater Lake, Oregon in April", "CausticRain11"]},
{"url": ["http://imgur.com/RPv475F"], "title": ["South Dakota is seriously beautiful.", "ratt1601"]},
{"url": ["http://imgur.com/oH1u7nk"], "title": ["The view outside my back door. Virginia is alright, I guess...", "toowhitetofail"]}]';
$array = json_decode($data, true);
foreach ($array as &$item) {
$item['url'] = $item['url'][0];
$item['title'] = implode(', ', $item['title']);
}
echo json_encode($array);
I am using first array item of url because it is always single in your example. And it makes no sense to concatenate urls - resut will not be valid url. But if you want, urls can be concatenated same way as title.
Result will look like this:
[
{
"url": "http://i.imgur.com/1Pw3ehZ.jpg",
"title": "Sunset in Trinidad, CA, bungholesex"
},
{
"url": "http://i.imgur.com/neQiFcf.jpg",
"title": "Humboldt Bay, Eureka California, bungholesex"
},
{
"url": "http://imgur.com/dxKHGLV",
"title": "Crater Lake, Oregon in April, CausticRain11"
},
{
"url": "http://imgur.com/RPv475F",
"title": "South Dakota is seriously beautiful., ratt1601"
},
{
"url": "http://imgur.com/oH1u7nk",
"title": "The view outside my back door. Virginia is alright, I guess..., toowhitetofail"
}
]
You can check it here.
Your Json above not valid. u should remove , and add ] at the end of your json.
U can check it using json validaor here.
http://jsonlint.com/
[{
"url": ["http://i.imgur.com/1Pw3ehZ.jpg"],
"title": ["Sunset in Trinidad, CA", "bungholesex"]
}, {
"url": ["http://i.imgur.com/neQiFcf.jpg"],
"title": ["Humboldt Bay, Eureka California", "bungholesex"]
}, {
"url": ["http://imgur.com/dxKHGLV"],
"title": ["Crater Lake, Oregon in April", "CausticRain11"]
}, {
"url": ["http://imgur.com/RPv475F"],
"title": ["South Dakota is seriously beautiful.", "ratt1601"]
}, {
"url": ["http://imgur.com/oH1u7nk"],
"title": ["The view outside my back door. Virginia is alright, I guess...", "toowhitetofail"]
}]
Context:
I'm building a website using Symfony2 (php) and I have already implemented a social(google) login function (through HWIOAuthBundle) that allows users to:
- register a new account using their own google account
- link a google account to an existing non-social account
As a result, in my database the users table already has a google_id field.
What I want to do:
Users must be able to submit youtube links of their own videos. These links will be saved in the database BUT first I need to verify that the video BELONGS(IS OWNED) to the user that is submitting the link. In other words: users CAN NOT submit videos uploaded by someone else.
I plan on using the Youtube API (php) that you can find on the google developers website.
Question(s):
How can I verify this condition? Can I use the Google Id that I already have in my users table? Or do I need to create a new youtube_id field because the id is different from the google_id? What api function/method should I call to verify the video ownership?
Ideas?
Try to check them by v3/videos - https://developers.google.com/youtube/v3/docs/videos/list
if you use "part=snippet"
you will see channel info in items->snippet->channelId and items->snippet->channelTitle
For example for https://www.youtube.com/watch?v=YVe2THgSDxc load
https://www.googleapis.com/youtube/v3/videos?id=YVe2THgSDxc&part=snippet&key=[YOUR_API_KEY]
You will get
{
"kind": "youtube#videoListResponse",
"etag": "*******",
"pageInfo": {
"totalResults": 1,
"resultsPerPage": 1
},
"items": [
{
"kind": "youtube#video",
"etag": "*******",
"id": "YVe2THgSDxc",
"snippet": {
"publishedAt": "2018-01-22T15:47:46.000Z",
"channelId": "UCiP6wD_tYlYLYh3agzbByWQ",
"title": "30 Minute HIIT Cardio*******",
"description": "Full info for thi*******.",
"thumbnails": {
"default": {
"url": "https://i.ytimg.com/vi/YVe2THgSDxc/default.jpg",
"width": 120,
"height": 90
},
*******
},
"channelTitle": "FitnessBlender",
"tags": [
"fitness blender",
"fitness",
"blender",
"workout",
"workout videos",
"hiit workout",
"cardio workout",
"hiit cardio",
"cardio at home",
"hiit at home",
"at home hiit",
"at home workouts",
"free workout videos",
"hiit cardio workout",
"strength",
"strength training",
"strength training workout",
"dumbbell workout",
"at home strength training",
"strength and hiit",
"hiit and strength",
"lower body workout",
"butt workout",
"thigh workout",
"butt and thigh workout",
"fat burning workout",
"muscle building workout"
],
"categoryId": "26",
"liveBroadcastContent": "none",
"localized": {
"title": "30 Minute HIIT Ca*******",
"description": "Full info for this *******"
}
}
}
]
}
So if you have users's channelID or channelName you can compare it with video's channelID or channelName.
If you have user's name but haven't his channel list you can get it by v3/channels
For example this gets channel list for user "popsugartvfit"
https://www.googleapis.com/youtube/v3/channels?&part=contentDetails&forUsername=popsugartvfit&key=[YOUR_API_KEY]
You will get
{
"kind": "youtube#channelListResponse",
"etag": "*****",
"pageInfo": {
"totalResults": 1,
"resultsPerPage": 5
},
"items": [
{
"kind": "youtube#channel",
"etag": "*******",
"id": "UCBINFWq52ShSgUFEoynfSwg",
"contentDetails": {
"relatedPlaylists": {
"uploads": "UUBINFWq52ShSgUFEoynfSwg",
"watchHistory": "HL",
"watchLater": "WL"
}
}
}
]
}
And use if for validation