如果您不瞭解代碼或需要其他功能幫助,請告訴我。 我也縮短了json代碼。你也許可以爲這個類實現更多的功能,併爲你自己創建一個活潑的FB-stats接口。
//編輯: 好的,我爲你創建了一個小的API接口。它包含一個包含文件,一個使用示例和2個example-json-files。請按照以下方式命名文件,並將它們全部放在同一個文件夾中。
的index.php:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html>
<head>
<title>Your title</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
</head>
<body>
<?php
//include files
include 'Stats.php';
//create an object of Stats
$stats = new Stats();
//parse any number of json files
$stats->parseJson("json1.txt");
$stats->parseJson("json2.txt");
//call the functions
print "<h1>var_dump of the data</h1>";
print '<pre>' . print_r($stats->getList(), true) . '</pre>';
print "<h1>By Country</h1>";
print "Austria:".$stats->getSumByCountry("Austria")."<br />";
print "Germany:".$stats->getSumByCountry("Germany")."<br />";
print "USA:".$stats->getSumByCountry("USA")."<br />";
print "<h1>By State</h1>";
print "Tirol:".$stats->getSumByState("Tirol")."<br />";
print "Bayern:".$stats->getSumByState("Bayern")."<br />";
print "Massachusetts:".$stats->getSumByState("Massachusetts")."<br />";
print "<h1>By City</h1>";
print "Austria:".$stats->getSumByCity("Imst")."<br />";
print "Berlin:".$stats->getSumByCity("Berlin")."<br />";
print "Los Angeles:".$stats->getSumByCity("Los Angeles")."<br />";
?>
</body>
</html>
Stats.php:
<?php
class Stats{
private $cities;
public function addCity($city){
$this->cities[]=$city;
}
public function parseJson($jsonFile){
$jsonData = file_get_contents($jsonFile);
if($jsonData == null || $jsonData==""){
die("Error: failed to load $jsonFile");
}
$object = json_decode($jsonData);
//naviagte through the object to the data we want to have
$data = $object->data;
$temp_item = $data[0];
$temp_value = $temp_item->values;
$temp_item2 = $temp_value[0];
$value = $temp_item2->value;
//now create an entity of City for each entry and put it in the list of this class
foreach ($value as $key=> $item){
$placeArray = explode(",",$key);
$city = trim($placeArray[0]);
$state = trim($placeArray[1]);
$country = trim($placeArray[2]);
$sum = $item;
$this->addCity(new City($sum, $city, $state, $country));
}
}
public function getSumByCity($name){
$sum = 0;
foreach ($this->cities as $city){
if(strcmp($city->name,$name) == 0){
$sum += $city->sum;
}
}
return $sum;
}
public function getSumByState($state){
$sum = 0;
foreach ($this->cities as $city){
echo "";
if(strcmp($city->state,$state) == 0){
$sum += $city->sum;
}
}
return $sum;
}
public function getSumByCountry($country){
$sum = 0;
foreach ($this->cities as $city){
if(strcmp($city->country,$country) == 0){
$sum += $city->sum;
}
}
return $sum;
}
public function getList(){
return $this->cities;
}
}
class City{
public $sum, $name, $state, $country;
function __Construct($sum, $name, $state, $country){
$this->name = $name;
$this->sum = $sum;
$this->state = $state;
$this->country = $country;
}
}
?>
json1.txt
{"data":[
{"id":"SOMEID/insights/page_fans_city/lifetime",
"name":"page_fans_city",
"period":"lifetime",
"values":[
{"value":
{"Wattens, Tirol, Austria":160,
"Imst, Tirol, Austria":123,
"Zirl, Tirol, Austria":117},
"end_time":""}],
"title":"",
"description":""}],
"paging":
{"previous":"",
"next":""}
}
json2.txt:
{"data":[
{"id":"SOMEID/insights/page_fans_city/lifetime",
"name":"page_fans_city",
"period":"lifetime",
"values":[
{"value":
{"Boston, Massachusetts, USA":199,
"Los Angeles, California, USA":55},
"end_time":""}],
"title":"",
"description":""}],
"paging":
{"previous":"",
"next":""}
}
refor將傳入數據抹掉會使這變得更容易,數據源是什麼? – 2012-02-27 03:57:05
結構是如此不合適我會覺得骯髒給出一個答案。 – h0tw1r3 2012-02-27 04:13:20
@Dagon:數據源來自Facebook的Graph API - Insights - page_fans_city。 developers.facebook.com/docs/reference/fql/insights(閱讀洞察權限需要 - 你可以看看在FB API資源管理器https://developers.facebook.com/tools/explorer) – 2012-02-27 04:56:07