/
FacebookWallposts.php
111 lines (94 loc) · 2.39 KB
/
FacebookWallposts.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
<?php
/**
* @author Honza Cerny <hello@honzacerny.com>
*/
namespace App\Model;
use Nette\Database\Context;
use Nette\Object;
use Facebook\FacebookRequest;
class FacebookWallposts extends Object
{
/**
* @var \Nette\Database\Context
*/
protected $database;
/**
* @var \App\Model\FacebookSessionManager
*/
protected $facebookSessionManager;
/**
* @param Context $database
* @param FacebookSessionManager $facebook
*/
function __construct(Context $database, FacebookSessionManager $facebook)
{
$this->database = $database;
$this->facebookSessionManager = $facebook;
}
public function getLastPosts($count = 5)
{
return $this->database->table('facebook_wallposts')
->where('status', '1')
->order('created_time DESC')
->limit($count)
->fetchAll();
}
public function importPostFromFacebook()
{
$session = $this->facebookSessionManager->getAppSession();
try {
$request = new FacebookRequest($session, 'GET', '/nettefw/feed');
$response = $request->execute();
$posts = $response->getGraphObject()->asArray();
$data = $posts['data'];
} catch (\Exception $ex) {
throw $ex;
$this->terminate();
}
// save data to database
if (is_array($data) && !empty($data)) {
foreach ($data as $rowPost) {
$post = array(
'id' => $rowPost->id,
'type' => $rowPost->type,
'created_time' => $rowPost->created_time,
'updated_time' => $rowPost->updated_time,
);
if (isset($rowPost->name)) {
$post['name'] = $rowPost->name;
}
if (isset($rowPost->link)) {
$post['link'] = $rowPost->link;
}
if (isset($rowPost->status_type)) {
$post['status_type'] = $rowPost->status_type;
}
if (isset($rowPost->message)) {
$post['message'] = $rowPost->message;
}
if (isset($rowPost->caption)) {
$post['caption'] = $rowPost->caption;
}
if (isset($rowPost->picture)) {
$post['picture'] = $rowPost->picture;
}
// post 'status' use story, we need message
if ($rowPost->type == 'status') {
if (isset($rowPost->story)) {
$post['message'] = $rowPost->story;
}
}
try {
$this->database->table('facebook_wallposts')->insert($post);
} catch (\PDOException $e) {
if ($e->getCode() == '23000') {
$this->database->table('facebook_wallposts')->where('id', $rowPost->id)->update($post);
} else {
throw $e;
}
}
}
}
return $data;
}
}