How do i Parsing JSON in Php Seprate and loop through data - php

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].

Related

How to use NewsAPI in Laravel

I want to build a website and insert news articles.
I found a free newsAPI website and I got apikey as below:
https://newsapi.org/v1/articles?source=techcrunch&apiKey=3329a36068a14512b9acb66f2b8f800a
I want to my website has a Live News and display some top news. but I don't know how to write proper code in Laravel. I have tried below code and only display image. I don't know how to display author, tile, description,url, etc. like newsAPI website live response. Appreciate if someone could help me.
<?php
$urlArticles = file_get_contents('https://newsapi.org/v1/articles?source=bbc-news&sortBy=top&apiKey=3329a36068a14512b9acb66f2b8f800a');
$urlArticlesArray = json_decode($urlArticles, true);
$articles = $urlArticlesArray['articles'];
for($i = 0; $i < count($articles); $i++) {
$sites = $urlArticlesArray['articles'][$i];
echo '<img src="'.$sites['urlToImage'].'">';
}
?>
newsAPI website Live response example:
{
"status": "ok",
"source": "techcrunch",
"sortBy": "top",
-"articles": [
-{
"author": "Lucas Matney",
"title": "Gadgets",
"description": "Product reviews and demos from our TechCrunch Gadget team",
"url": "https://techcrunch.com/video/gadgets/",
"urlToImage": "https://tctechcrunch2011.files.wordpress.com/2013/10/techcrunch-gadgets-icon_rect.png?w=450&h=200&crop=1",
"publishedAt": "2017-04-07T23:00:45Z"
},
-{
"author": "Romain Dillet",
"title": "Uber is now banned in Italy for unfair competition",
"description": "While Uber is fighting Waymo at home, the American company is also having issues abroad. As Reuters reported, an Italian court has ordered Uber to stop all..",
"url": "https://techcrunch.com/2017/04/09/uber-is-now-banned-in-italy-for-unfair-competition/",
"urlToImage": "https://tctechcrunch2011.files.wordpress.com/2014/02/uber.jpg?w=764&h=400&crop=1",
"publishedAt": "2017-04-09T09:53:47Z"
},
-{
"author": "Ryan Lawler",
"title": "Gig economy stalwart TaskRabbit is contemplating a sale",
"description": "One of the earliest and most prominent startups of the so-called \"sharing economy\" or \"gig economy,\" is evaluating the possibility of selling itself. As..",
"url": "https://techcrunch.com/2017/04/08/taskrabbit-acquisition-maybe/",
"urlToImage": "https://tctechcrunch2011.files.wordpress.com/2015/01/taskrabbit-fire.png?w=764&h=400&crop=1",
"publishedAt": "2017-04-08T23:44:34Z"
},
-{
"author": "Ryan Lawler",
"title": "Netflix’s long-time chief product officer Neil Hunt is leaving the company",
"description": "Streaming video provider Netflix is making a change in its senior management, as the company announced long-time chief product officer Neil Hunt will be..",
"url": "https://techcrunch.com/2017/04/08/netflix-neil-hunt-leaving/",
"urlToImage": "https://tctechcrunch2011.files.wordpress.com/2017/04/los-gatos_01.jpg?w=764&h=400&crop=1",
"publishedAt": "2017-04-08T21:30:52Z"
},
-{
"author": "Natasha Lomas",
"title": "Postepic is an app for elegantly sharing book quotes",
"description": "Postepic wants to liberate all those interesting text snippets you have languishing on your camera roll and turn them into visually appealing quotations ready..",
"url": "https://techcrunch.com/2017/04/08/postepic-is-an-app-for-elegantly-sharing-book-quotes/",
"urlToImage": "https://tctechcrunch2011.files.wordpress.com/2017/04/p1050418.jpg?w=764&h=400&crop=1",
"publishedAt": "2017-04-08T16:00:31Z"
}
]
}
OK, first: I would use something like Guzzle to call external sources....
Guzzle Docs
Then, in your code...
$client = new GuzzleHttp\Client();
$url = 'https://.....';
$response = $client->get(url);
dd($response->getStatusCode()); // will dump the statuscode
dd($response->getBody()); // will dump the body
$body = $response->getBody(); //assign body to var
etc...

How to get Deeplinks in json format with PHP?

How to get Deeplinks in JSON format with PHP?
This is the JSON object I actually have
{
"_type": "SearchResponse",
"webPages": {
"webSearchUrl": "https:\/\/www.bing.com\/cr?IG=B470EF0A41D94B338002992668141CC5&CID=1B1D0110A94966F5383E0B4AA8A067DE&rd=1&h=sFk5GtkV8PxaqVq0K3GniaQOQJqKR2jqw1udftLC9QE&v=1&r=https%3a%2f%2fwww.bing.com%2fsearch%3fq%3dcontemporary%2bfurniture&p=DevEx,5336.1",
"totalEstimatedMatches": 46000000,
"value": [{
"id": "https:\/\/api.cognitive.microsoft.com\/api\/v5\/#WebPages.0",
"name": "Contemporary Furniture. Modern and Scandinavian designs.",
"url": "https:\/\/www.bing.com\/cr?IG=B470EF0A41D94B338002992668141CC5&CID=1B1D0110A94966F5383E0B4AA8A067DE&rd=1&h=Q0wwocl-JR44YrK1RsR_5rSqO4KPlSPx0KgUi-sMocA&v=1&r=https%3a%2f%2fcontemporaryfurniture.com%2f&p=DevEx,5080.1",
"displayUrl": "https:\/\/contemporaryfurniture.com",
"snippet": "The finest in contemporary and modern furniture. Imported and domestic styles, bedrooms, sofas, home office, more. Shop online or visit our NY showroom.",
"deepLinks": [{
"name": "Bedrooms",
"url": "https:\/\/www.bing.com\/cr?IG=B470EF0A41D94B338002992668141CC5&CID=1B1D0110A94966F5383E0B4AA8A067DE&rd=1&h=jo1rIVengiXnaKOkFczZ54qrp9-L4W2jb1sJ41jl04g&v=1&r=https%3a%2f%2fwww.contemporaryfurniture.com%2fshop%2fbedrooms-19%2f&p=DevEx,5072.1",
"snippet": "Bedroom sets including beds, dressers, nightstands and chests. Produced in various woods and lacquers. Contemporary, scandinavian and modern designs."
}, {
"name": "Dining Rooms",
"url": "https:\/\/www.bing.com\/cr?IG=B470EF0A41D94B338002992668141CC5&CID=1B1D0110A94966F5383E0B4AA8A067DE&rd=1&h=EsyLPbUccu5BzwCeceP_S5u46vo4gSDMG7vP29BfjFE&v=1&r=https%3a%2f%2fwww.contemporaryfurniture.com%2fshop%2fdining-rooms-12%2f&p=DevEx,5073.1",
"snippet": "Dining Room sets, dining tables, servers, buffet and china cabinets. Contemporary and Scandinavian styles."
}, {
"name": "Barstool",
"url": "https:\/\/www.bing.com\/cr?IG=B470EF0A41D94B338002992668141CC5&CID=1B1D0110A94966F5383E0B4AA8A067DE&rd=1&h=6rOwsJH4uT4LzjG833eSRYQgDMCKiogHGdgnokFVSEg&v=1&r=https%3a%2f%2fwww.contemporaryfurniture.com%2fshop%2fbarstool-16%2f&p=DevEx,5074.1",
"snippet": "Barstools and counterstools contemporary, modern and scandinavian designs produced in wood and metal."
}, {
"name": "Chairs",
"url": "https:\/\/www.bing.com\/cr?IG=B470EF0A41D94B338002992668141CC5&CID=1B1D0110A94966F5383E0B4AA8A067DE&rd=1&h=ADlw0i43aQhdLC0tHBfjMFjYwiWYHZ3ggdG6RhZv9ss&v=1&r=https%3a%2f%2fwww.contemporaryfurniture.com%2fshop%2fchairs-13%2f&p=DevEx,5075.1",
"snippet": "Chairs to compliment your living room produced in fabric upholstery and leather. Contemporary and modern designs."
}],
"dateLastCrawled": "2017-03-31T17:25:00"
}, {
"id": "https:\/\/api.cognitive.microsoft.com\/api\/v5\/#WebPages.1",
"name": "Contemporary Furniture | Houzz",
"url": "http:\/\/www.bing.com\/cr?IG=B470EF0A41D94B338002992668141CC5&CID=1B1D0110A94966F5383E0B4AA8A067DE&rd=1&h=vsM0va_8kehN5ZnPil2frs3eKL16FOHnut88FvEHRsM&v=1&r=http%3a%2f%2fwww.houzz.com%2fphotos%2fcontemporary%2ffurniture&p=DevEx,5098.1",
"displayUrl": "www.houzz.com\/photos\/contemporary\/furniture",
"snippet": "Browse a wide selection of contemporary furniture for sale on Houzz, including wood furniture and leather furniture for your dining room, office, bedroom and living room.",
"dateLastCrawled": "2017-03-30T22:51:00"
}, {
"id": "https:\/\/api.cognitive.microsoft.com\/api\/v5\/#WebPages.2",
"name": "Affordable Modern Furniture, Decor & Lighting online. Free ...",
"url": "https:\/\/www.bing.com\/cr?IG=B470EF0A41D94B338002992668141CC5&CID=1B1D0110A94966F5383E0B4AA8A067DE&rd=1&h=OwOQI48E8ZhxF8xWw-iB2POJliBV0LIE3CucLePUzeg&v=1&r=https%3a%2f%2fwww.contemporaryfurniturewarehouse.com%2f&p=DevEx,5112.1",
"displayUrl": "https:\/\/www.contemporaryfurniturewarehouse.com",
"snippet": "Modern & Contemporary Furniture on sale. Shop for sofas, sectionals, accent chairs, dining chairs, bar stools, office chairs, stools, outdoor furniture & more.",
"dateLastCrawled": "2017-03-31T02:54:00"
}
And here is the code I did so far:
$i=1;
foreach($data->webPages->value as $val){
if($i==1){
$part = $val['deepLinks']->snippet;
}
$i++;
}
Results in: Fatal error: Cannot use object of type stdClass as array.
how to get that value?
I think it may have to do with $data. It isn't an Array.
Did you use json_decode() to turn your JSON object to a PHP variable? If yes, then you need to change it to:
json_decode($myJSON, true);
If set to true PHP will return an associative array but If not PHP it will return a object(stdClass).
You can read more about why that is here
If you want a flat array of deepLinks, try this:
$ret = [];
foreach($data->webPages->value as $val){
if(property_exists($val,"deepLinks")){
$ret = array_merge($ret, $val->deepLinks);
}
}
var_dump($ret);
I tested it and it works.
On the other hand, if you want to get it grouped:
$ret = [];
foreach($data->webPages->value as $val){
if(property_exists($val,"deepLinks")){
$ret[] = $val->deepLinks;
}
}
var_dump($ret);
The test JSON I've used:
$data = '{
"_type": "SearchResponse",
"webPages": {
"webSearchUrl": "https:\/\/www.bing.com\/cr?IG=B470EF0A41D94B338002992668141CC5&CID=1B1D0110A94966F5383E0B4AA8A067DE&rd=1&h=sFk5GtkV8PxaqVq0K3GniaQOQJqKR2jqw1udftLC9QE&v=1&r=https%3a%2f%2fwww.bing.com%2fsearch%3fq%3dcontemporary%2bfurniture&p=DevEx,5336.1",
"totalEstimatedMatches": 46000000,
"value": [{
"id": "https:\/\/api.cognitive.microsoft.com\/api\/v5\/#WebPages.0",
"name": "Contemporary Furniture. Modern and Scandinavian designs.",
"url": "https:\/\/www.bing.com\/cr?IG=B470EF0A41D94B338002992668141CC5&CID=1B1D0110A94966F5383E0B4AA8A067DE&rd=1&h=Q0wwocl-JR44YrK1RsR_5rSqO4KPlSPx0KgUi-sMocA&v=1&r=https%3a%2f%2fcontemporaryfurniture.com%2f&p=DevEx,5080.1",
"displayUrl": "https:\/\/contemporaryfurniture.com",
"snippet": "The finest in contemporary and modern furniture. Imported and domestic styles, bedrooms, sofas, home office, more. Shop online or visit our NY showroom.",
"deepLinks": [{
"name": "Bedrooms",
"url": "https:\/\/www.bing.com\/cr?IG=B470EF0A41D94B338002992668141CC5&CID=1B1D0110A94966F5383E0B4AA8A067DE&rd=1&h=jo1rIVengiXnaKOkFczZ54qrp9-L4W2jb1sJ41jl04g&v=1&r=https%3a%2f%2fwww.contemporaryfurniture.com%2fshop%2fbedrooms-19%2f&p=DevEx,5072.1",
"snippet": "Bedroom sets including beds, dressers, nightstands and chests. Produced in various woods and lacquers. Contemporary, scandinavian and modern designs."
}, {
"name": "Dining Rooms",
"url": "https:\/\/www.bing.com\/cr?IG=B470EF0A41D94B338002992668141CC5&CID=1B1D0110A94966F5383E0B4AA8A067DE&rd=1&h=EsyLPbUccu5BzwCeceP_S5u46vo4gSDMG7vP29BfjFE&v=1&r=https%3a%2f%2fwww.contemporaryfurniture.com%2fshop%2fdining-rooms-12%2f&p=DevEx,5073.1",
"snippet": "Dining Room sets, dining tables, servers, buffet and china cabinets. Contemporary and Scandinavian styles."
}, {
"name": "Barstool",
"url": "https:\/\/www.bing.com\/cr?IG=B470EF0A41D94B338002992668141CC5&CID=1B1D0110A94966F5383E0B4AA8A067DE&rd=1&h=6rOwsJH4uT4LzjG833eSRYQgDMCKiogHGdgnokFVSEg&v=1&r=https%3a%2f%2fwww.contemporaryfurniture.com%2fshop%2fbarstool-16%2f&p=DevEx,5074.1",
"snippet": "Barstools and counterstools contemporary, modern and scandinavian designs produced in wood and metal."
}, {
"name": "Chairs",
"url": "https:\/\/www.bing.com\/cr?IG=B470EF0A41D94B338002992668141CC5&CID=1B1D0110A94966F5383E0B4AA8A067DE&rd=1&h=ADlw0i43aQhdLC0tHBfjMFjYwiWYHZ3ggdG6RhZv9ss&v=1&r=https%3a%2f%2fwww.contemporaryfurniture.com%2fshop%2fchairs-13%2f&p=DevEx,5075.1",
"snippet": "Chairs to compliment your living room produced in fabric upholstery and leather. Contemporary and modern designs."
}],
"dateLastCrawled": "2017-03-31T17:25:00"
}, {
"id": "https:\/\/api.cognitive.microsoft.com\/api\/v5\/#WebPages.1",
"name": "Contemporary Furniture | Houzz",
"url": "http:\/\/www.bing.com\/cr?IG=B470EF0A41D94B338002992668141CC5&CID=1B1D0110A94966F5383E0B4AA8A067DE&rd=1&h=vsM0va_8kehN5ZnPil2frs3eKL16FOHnut88FvEHRsM&v=1&r=http%3a%2f%2fwww.houzz.com%2fphotos%2fcontemporary%2ffurniture&p=DevEx,5098.1",
"displayUrl": "www.houzz.com\/photos\/contemporary\/furniture",
"snippet": "Browse a wide selection of contemporary furniture for sale on Houzz, including wood furniture and leather furniture for your dining room, office, bedroom and living room.",
"dateLastCrawled": "2017-03-30T22:51:00"
}]
}
}';
I completed the missing parts.

How can I retrieve information from Json data in a format where almost everything is stored as an array?

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"]
}]

Loop through JSON from jquery getJSON

Here is the code:
$.getJSON( base_url + '/ajax/sortListings.php', { sort: sort }, function( data ) {
$.each(data, function(i, json) {
$( '#listings' ).append($('<div>').load( base_url + '/partialviews/listingAdminPrev.php', {
id: json.id,
name: json.name,
logo: encodeURIComponent(json.logo),
address: json.address,
city: json.city,
state: json.state,
zip: json.zip,
phone: json.phone,
email: json.email,
web_link: encodeURIComponent(json.web_link),
services: json.services,
category: json.category,
status: json.status,
created: json.created
} ));
});
});
When I manually go to the sortListings.php file and turn the $_POST variables to $_GET, it works fine. So nothing is wrong with the file. But here it is anyway:
include_once('../../app/scripts/config.php');
$listingObject = Listing::getInstance();
$results = $listingObject->get_listings($_POST['sort']);
echo json_encode($results);
That file returns this:
[
{
"id": "32",
"user_id": "32",
"logo": "32_52a0960ba791c.jpg",
"name": "Anthony Thomas Advertising",
"address": "380 S. Main St.",
"city": "Akron",
"state": "AL",
"zip": "44311",
"phone": "3302536888",
"email": "wayne#anthonythomas.com",
"web_link": "http://www.aol.com",
"status": "1",
"services": "dfhfdhdfh",
"category": "1",
"created": "2013-12-05 09:32:56"
},
{
"id": "20",
"user_id": "10",
"logo": "10_529f96001390d.png",
"name": "Graphic Installation Services",
"address": "2808 Broadway Blvd Unit 1",
"city": "Monroeville",
"state": "PA",
"zip": "15146",
"phone": "3306599898",
"email": "graphic#graphicinstallationservices.com",
"web_link": "",
"status": "4",
"services": "Graphic installation services",
"category": "1",
"created": "2013-12-04 11:35:11"
},
{
"id": "21",
"user_id": "10",
"logo": "10_529f9c1a8375d.png",
"name": "Intellect Productions",
"address": "2915 13th St NW",
"city": "Canton",
"state": "OH",
"zip": "44708",
"phone": "3309334833",
"email": "mouseywings#live.com",
"web_link": "",
"status": "1",
"services": "Car Wrap Installations by Intellect Productions",
"category": "1",
"created": "2013-12-04 15:20:15"
},
{
"id": "19",
"user_id": "10",
"logo": "10_529cf170b08d7.png",
"name": "International Installations Inc",
"address": "833 Wooster Rd N",
"city": "Barberton",
"state": "OH",
"zip": "44203",
"phone": "3306586526",
"email": "internationalinstallers#internationinstallers.com",
"web_link": "http://intellectproductions.com/",
"status": "1",
"services": "We install:\r\n· vehicle wraps\r\n· decals\r\n· vehicle lettering\r\n· banners\r\n· billboards\r\n· murals\r\nInternational Image Application Inc. is PDAA certified. We strive to deliver a constant flow of high quality work using best materials in the business, and unsurpassed skill. This ensures that our clients receive value for money, and more bang for their buck!\r\nAnd to ensure that our clients continue to receive the highest quality of work possible, we stay on top of technological trends, new materials, and installation techniques. This dedication to continued education has resulted in many clients coming back again and again.\r\nFrom a simple vehicle wraps installation to an entire ad campaign or fleet, International Image Application Inc. is your destination for precision graphics installation on virtually any medium.",
"category": "1",
"created": "2013-12-04 10:32:52"
}
]
Which is 5 listings.. so it's pulling the data fine. However, nothing is working beyond the $.each().. I even tried alerting stuff and nothing.
No console errors are thrown either..
You hit on your problem. You are expecting the sort parameter in $_POST while you are calling getJSON() which executes a GET.
Make up your mind whether you want to use GET or POST and be consistent.
My guess is you also need to put better error handling in Listing::get_listings() method to provide useful errors when you are not getting the data your expect passed to it.

Google Books API data as PHP array?

I get the following response from the google:
{
"kind": "books#volumes",
"totalItems": 1,
"items": [
{
"kind": "books#volume",
"id": "t9S82uKGp8IC",
"etag": "rn9INXAtx88",
"selfLink": "https://www.googleapis.com/books/v1/volumes/t9S82uKGp8IC",
"volumeInfo": {
"title": "Classic Swedish Interiors",
"authors": [
"Lars Sjöberg",
"Ingalill Snitt"
],
"publisher": "Frances Lincoln Ltd",
"publishedDate": "2010-09-07",
"description": "Lars Sjöberg has made it his life's work to understand and preserve the Swedish manor houses of the 17th and 18th centuries. Here, exquisitely photographed by Ingalill Snitt, are the eight houses (and one church) that he has acquired over more than 40 years. The book focuses on Sjöberg's first, most complex project: the manor of Regnaholm. Unoccupied for about 40 years when Sjöberg arrived in 1966, it allowed him to experiment with interior decoration and refurnishing, copying old furniture, reweaving, and reprinting old fabric patterns. His other projects include Ekensberg, a three-story Italianate villa near Lake Mälaren, built in 1788-90, and Salaholm in Västergötland with a garden laid out in the first half of the 17th century. Odenslunda, a small manor from the 1770s with a panelled exterior and a säteritak or manor-house roof, is his family home, while Sörby, a scaled-down early 17th-century manor house, was reproduced in its entirety for an exhibition in Stockholm. Full of insight and inspiration, this is a deeply personal summary of everything Lars Sjöberg has learned in his years of working and living with classic Swedish interiors.",
"industryIdentifiers": [
{
"type": "ISBN_10",
"identifier": "0711230889"
},
{
"type": "ISBN_13",
"identifier": "9780711230880"
}
],
"pageCount": 208,
"printType": "BOOK",
"categories": [
"Architecture"
],
"contentVersion": "preview-1.0.0",
"imageLinks": {
"smallThumbnail": "http://bks8.books.google.com/books?id=t9S82uKGp8IC&printsec=frontcover&img=1&zoom=5&edge=curl&source=gbs_api",
"thumbnail": "http://bks8.books.google.com/books?id=t9S82uKGp8IC&printsec=frontcover&img=1&zoom=1&edge=curl&source=gbs_api"
},
"language": "en",
"previewLink": "http://books.google.com/books?id=t9S82uKGp8IC&printsec=frontcover&dq=isbn:9780711230880&cd=1&source=gbs_api",
"infoLink": "http://books.google.com/books?id=t9S82uKGp8IC&dq=isbn:9780711230880&source=gbs_api",
"canonicalVolumeLink": "http://books.google.com/books/about/Classic_Swedish_Interiors.html?id=t9S82uKGp8IC"
},
"saleInfo": {
"country": "ZA",
"saleability": "NOT_FOR_SALE",
"isEbook": false
},
"accessInfo": {
"country": "ZA",
"viewability": "PARTIAL",
"embeddable": true,
"publicDomain": false,
"textToSpeechPermission": "ALLOWED_FOR_ACCESSIBILITY",
"epub": {
"isAvailable": false
},
"pdf": {
"isAvailable": true,
"acsTokenLink": "http://books.google.com/books/download /Classic_Swedish_Interiors-sample-pdf.acsm?id=t9S82uKGp8IC&format=pdf&output=acs4_fulfillment_token&dl_type=sample&source=gbs_api"
},
"webReaderLink": "http://books.google.com/books/reader?id=t9S82uKGp8IC& printsec=frontcover&output=reader&source=gbs_api",
"accessViewStatus": "SAMPLE"
},
"searchInfo": {
"textSnippet": "Full of insight and inspiration, this is a deeply personal summary of everything Lars Sjöberg has learned in his years of working and living with classic Swedish interiors."
}
}
]
What is this format called? (It's not XML or JSON?)
How do I convert this text into an PHP array?
It's JSON. You can use json_decode() to convert it into a PHP associative array.
$books = json_decode($your_json_data, true);
print_r($books);

Categories