Extract values from "media" array - json

I made and fql query and saved it into an array
$resultposts = $facebook->api(array('method' => 'fql.query',
'query' => $fqlQueryposts));
To extract the name value I use this:
echo $resultposts['first_name'];
But I have problems with "media" array, that it's into "attachment" array. This is the structure: $resultposts>attachment>media>
I should extract "type", "src" and "href" values from "media" array.
I tried in this way:
$resultposts['attachment']['media']['type'];
But it doesn't work. The error is "undefined index: type".
What can I do? Thanks

This post is a little old but as I stumbled upon it while searching for the very same question and found the answer I'll share it for others.
Using PHP SDK (3.11)
$attachment = $facebook->api(array('method' => 'fql.query', 'query' => 'SELECT attachment FROM stream WHERE post_id = "'.$poid.'"'));
foreach($attachment as $attach)
{
foreach($attach as $i => $o)
{
echo $o['name'];
foreach($o['media'] as $t => $y)
{
echo $y['type'];
}
}
}

Related

"Can't use string ("") as a HASH ref while "strict refs" in use at" error while assigning hash to an hash in perl

I'm assigning an hash %attributes to another hash %attributes_r. I need to print it as key/value pair of that hash %attributes, as mentioned below. But, while printing, why do I get this error, "Can't use string ("") as a HASH ref while "strict refs" in use at" in this line "foreach my $key1 (keys %{$attributes_r{$key}}) {" ?
My Code:
use strict;
use warnings;
our %attributes_r;
my %attributes = ('clear' => 0,
'reset' => 0,
'bold' => 1,
'dark' => 2,
'underscore' => 4,
'blink' => 5,
'reverse' => 7,
'concealed' => 8
);
for (keys %attributes) {
$attributes_r{$attributes{$_}} = $attributes{$_};
# print "$_ => $attributes_r{$attributes{$_}}\n";
}
foreach my $key (keys %attributes_r) {
foreach my $key1 (keys %{$attributes_r{$key}}) {
print "$key1 = > $attributes_r{$key}{$key1}\n";
}
}
Any help is appreciated.
With your data, this is incorrect:
foreach my $key1 (keys %{$attributes_r{$key}}) {
You are trying to dereference a value that is a string, not a reference, like the error says. If you did have a hash of hash, it might work, but you do not.
You might be trying to create a hash of hash, I'm not sure. This piece of code is very odd:
$attributes_r{$attributes{$_}} = $attributes{$_};
Here you are taking the value from the original hash and use it as a key in the other hash. For example:
$attributes_r{0} = 0;
This is not really going to accomplish anything useful. If you clarify what it is you are trying to do I might be able to suggest a fix.
Also, if you are trying to view the data structure you are creating, I suggest you print it with Data::Dumper like this:
use Data::Dumper;
...
print Dumper \%attributes_r;

cURL retrieve json data and store in mysql database from url

i'm facing problems into cURL. here i can get the json data from another source code and also i got some ideas. but really i can't save the json data into my own server in sql database. i wanna to retrieve the data from
url: https://jamuna.tv/wp-json/wp/v2/posts
and wanna to save into my server (mysql).
here is the $url json data i wanna to save in mysql server:
id
date
link
title
content
author
categories
wp:attachment
and i want to save them into mysql database. my table name is "news" and i want to save them into my table columns.
id [id]
title [title]
description [content]
date [date]
category [categories]
thumbnail [wp:attachment]
admin [author]
here i'm mark the json from url and replaced into my sql columns name. if anyone can give me the instructions about how i can fetch the data from user and save into mysql.
thanks advance.
There is an implementation of your desired with PHP. You must check if values are valid or not or if the array members exist or not. This is just a primitive implementation of your example.
<!DOCTYPE html>
<html>
<body>
<?php
// db connection
$options = array(
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC
);
$db = new PDO('mysql:host=localhost;dbname=test;', 'user', 'pass', $options);
// download json from url
$json = file_get_contents('https://jamuna.tv/wp-json/wp/v2/posts');
echo '<br/>';
$sql = "INSERT INTO `mytable` (`id`,`title`,`description`,`date`,`category`,`thumbnail`,`admin`)
VALUES (:id, :title, :content , :date, :categories, :attachment, :author)";
$stm = $db->prepare($sql);
// parse JSON
$arr = json_decode($json, true);
$i = 0;
foreach ($arr as $record) {
echo "==================Insert record " . $i ++ . "<br>";
$data = array(
':id' => $record['id'],
':title' => $record['title']['rendered'],
':content' => $record['content']['rendered'],
':date' => $record['date'],
':categories' => $record['categories'][0],
':attachment' => $record['_links']['wp:attachment'][0]['href'],
':author' => $record['author']
);
var_dump($data);
// inserting a record
$stm->execute($data);
}
?>
</body>
</html>

How to parse JSON/REST data from server using Perl

Im trying to parse out JSON output from the server using Perl. The connection and downloading of the REST data is ok, I just need help parsing the returned data. Here is the snippet for my code:
my $response = HTTP::Tiny->new->get($SERVER_ADDR);
if ($response->{success})
{
my $html = $response->{content};
#LINES = split /\n/, $html;
chomp(#LINES);
print("Lines: '#LINES'\n"); # ZZZ
my $decoded_json = decode_json( $html );
print Dumper $decoded_json;
}
else
{
print "Failed: $response->{status} $response->{reasons}";
}
And here is the results:
Lines: '{"players":[{"currentlyOnline":false,"timePlayed":160317,"name":"MarisaG","lastPlayed":1474208741470}]}'
$VAR1 = {
'players' => [
{
'currentlyOnline' => bless( do{\(my $o = 0)}, 'JSON::PP::Boolean' ),
'timePlayed' => 160317,
'lastPlayed' => '1474208741470',
'name' => 'MarisaG'
}
]
};
There will be multiple entries under the "players" for each player logged in right now. Any tips?
I'm not really sure what you're asking. You have successfully parsed the JSON by by calling decode_json(). You now have a data structure in $decoded_json. Your call to Dumper() shows the structure of that data. It's a hash reference with a single key, players. The value associated with that key is an array reference. Each element in the referenced array is another hash.
So, for example, you could print all of the players' names with code like this.
foreach (#{ $decoded_json->{players} }) {
say $_->{name};
}

Wordpress pods: Exporting specific columns to json

I have the following code for exporting all the items in one of my pods to json. The thing is I don't need all the 130 columns in the json file, but only about 20. Since this will be done for about 150 items I thought I could save some loading time by not printing out all the fields, but I do not know how to do this. For example I only want to print the column value named 'title' for all items in the pod. My code is attached bellow.
<?php
$pods = pods('name', array('orderby' => 'name asc', 'limit' => -1));
$all_companies = $pods->export_data();
if ( !empty( $all_companies ) ) {
die(json_encode($all_companies);
}else{
die(json_encode(array('error' => 'No cars found.')));
}
?>
I thought about doing something like this:
if ( 0 < $all_companies->total() ) {
while ($all_companies->fetch()) {
$json .= $all_companies->field('title');
}
$json = rtrim($json, ",");
$json .= '}}';
}
echo $json;
But it doesn't work and also the code becomes very long.
I'd make an array of the names of the twenty fields you want then build an array of those fields for each item, by doing a foreach of those field names passed to Pods::field() inside the while loop. Like this:
$pods = pods('name', array('orderby' => 'name asc', 'limit' => -1));
$fields = array( 'field_1', 'field_2' );
if ( $pods->total() > 0 ) {
while ( $pods->fetch() ) {
foreach ( $fields as $field ) {
$json[ $pods->id() ] = $pods->field( $field );
}
}
$json = json_encode( $json );
}
Alternatively, you could hack the /pods/<pod> endpoint of our JSON API to accept a list of fields to return as the body of the request. Wouldn't be hard to do, make sure to submit a pull request if you make it work.

Converting perl Data Dumper Format into JSON

I have Dumper outputting data correctly:
'Apps' => [
\{
'name' => '1'
},
\{
'name' => '2'
},
\{
'name' => '3'
},
\{
'name' => '4'
},
\{
'name' => '5'
},
\{
'name' => '6'
},
\{
'name' => '7'
}
],
'code' => 'SUCCESS'
};
But when I convert it to JSON I have a lot of problems:
my #jsonapps;
my #apps = map { $_ } keys %glob;
my %hash;
$hash{'code'} = 'SUCCESS';
for (#apps) {
my $app = { 'name' => $_ };
push (#jsonapps, \$app);
}
# $hash{'Apps'} = \#jsonapps;
my $jsonfinal = encode_json \%hash;
print $jsonfinal;
It definitely has to do when with I try to add an array of hashes in:
$hash{'Apps'} = \#jsonapps;
But I'm having a problem doing that since all the hashes have the same key "name". I need my output to look like:
{"code":"SUCCESS","Apps":[{"name":"1"},{"name":"2"},{"name":"3"},{"name":"4"},{"name":"5"},{"name":"6"},{"name":"7"}]}
Thanks, I appreciate the help - I've scoured everywhere to figure out how to do this, and I'm just banging my head against the wall now. Thanks!
Notice the extra \ in your dump output.
'Apps' => [
\{
'name' => '1'
},
This is because it they are references to hash references. The problem code is here:
for (#apps) {
my $app = { 'name' => $_ };
push (#jsonapps, \$app);
}
$app is already a hashref since you use braces and assign it to a scalar. But adding the \ in front when you push it to #jsonapps means you are pushing the reference to the hashref. You don't need to make it a reference because it is already a reference. You just need to omit the \.
for (#apps) {
my $app = { 'name' => $_ };
push (#jsonapps, $app);
}