-
Notifications
You must be signed in to change notification settings - Fork 136
Abstracting Facebook API functions #78
base: master
Are you sure you want to change the base?
Changes from 3 commits
c55cb4b
6de0860
9d2c9d3
668e459
21f0792
6ba8f8b
dc771c9
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,101 @@ | ||
| <?php | ||
| /* | ||
| * This file is part of FOSFacebookBundle. | ||
| * | ||
| * (c) Teemu Reibacka <[email protected]> | ||
| * | ||
| * This class functions as a model for messages to be sent by the facebookPush-service to the Facebook api. | ||
|
||
| */ | ||
|
|
||
| namespace FOS\FacebookBundle\Models; | ||
|
||
|
|
||
| class streamPost | ||
|
||
| { | ||
| protected $accessToken; | ||
| protected $message; | ||
| protected $attachment; | ||
|
|
||
| /** | ||
| * Sets the access token used in message body. This is set automatically inside facebookPush-service. | ||
| * @param string $accessToken | ||
| */ | ||
| public function setAccessToken($accessToken) | ||
| { | ||
| $this->accessToken = $accessToken; | ||
| } | ||
| /** | ||
| * | ||
| * Sets the actual text content of the message | ||
| * @param string $message | ||
| */ | ||
| public function setMessage($message) | ||
| { | ||
| $this->message = $message; | ||
| } | ||
|
|
||
| /** | ||
| * Adds an attachment-picture to your Facebook message. If you specify a link, the image will function as a link. | ||
| * @param string $name This is the title of the attachment (top-most descriptive text) | ||
| * @param string $caption This is the image caption (text under the title) | ||
| * @param string $uriAttachment Full uri to the image you wish to attach. This location must be visible to Facebook, they will cache the picture. | ||
| * @param string $uriLinkOut Full uri to where you sish the image to link to | ||
| * @param string $description Description field in the message. If you do not specify this, Facebook may crawl the website specified in the link/image and attach a meta-description foiund from there to the message. | ||
| */ | ||
| public function setAttachment($name, $caption, $uriAttachment, $uriLinkOut = null, $description = null) | ||
| { | ||
| $attachment = array( | ||
| 'name' => $name, | ||
| 'caption' => $caption, | ||
| 'picture' => $uriAttachment, | ||
| ); | ||
|
|
||
| if (!empty($description)) { | ||
| $attachment['description'] = $description; | ||
| } | ||
| if (!empty($uriLinkOut)) { | ||
| $attachment['link'] = $uriLinkOut; | ||
| } | ||
| $this->attachment = $attachment; | ||
| } | ||
| /** | ||
| * Shortcut for adding a link to you FAcebook-message without an image. The setAttachment(...) will override this function. | ||
| * @param string $name This is the title of the link (top-most descriptive text) | ||
|
||
| * @param string $linkOut Full uri to where you wish to link to | ||
| * @param string $caption Optional description of the link | ||
| */ | ||
| public function setLink($name, $linkOut, $caption = null) | ||
| { | ||
| $this->linkout = array( | ||
| 'name' => $name, | ||
| 'link' => $linkOut | ||
| ); | ||
| if (!empty($caption)) $this->linkout['caption'] = $caption; | ||
|
||
| } | ||
| /** | ||
| * Formats this object into on array that can be fed to the php-api class. This function will be called automatically. | ||
| * @throws \Exception | ||
| * @return array | ||
| */ | ||
| public function formatData() | ||
| { | ||
| if (empty($this->accessToken)) { | ||
| throw new \Exception('cannot format Facebook message: Facebook access token is empty'); | ||
| } | ||
| if (empty($this->message)) { | ||
| throw new \Exception('cannot format Facebook message: Message is empty, nothing to send'); | ||
| } | ||
| $stream_post = array( | ||
|
||
| 'access_token' => $this->accessToken, | ||
| 'message' => $this->message | ||
| ); | ||
| if (!empty($this->linkout)) { | ||
| $stream_post = array_merge($stream_post, $this->linkout); | ||
| } | ||
| if (!empty($this->attachment)) { | ||
| $stream_post = array_merge($stream_post, $this->attachment); | ||
| } | ||
|
|
||
| return $stream_post; | ||
| } | ||
| } | ||
| ?> | ||
|
||
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,158 @@ | ||
| <?php | ||
| /* | ||
| * This file is part of FOSFacebookBundle. | ||
| * | ||
| * (c) Teemu Reibacka <[email protected]> | ||
| * | ||
| * File provides a service that abstracts Facebook API functionality such as retrieving user information and | ||
| * posting data to Facebook API. | ||
|
||
| */ | ||
| namespace FOS\FacebookBundle\Services; | ||
|
|
||
| use Symfony\Bundle\FrameworkBundle\Controller\Controller; | ||
| use FOS\FacebookBundle\Models\streamPost as BaseMessage; | ||
| use \BaseFacebook; | ||
|
|
||
| class facebookPush | ||
|
||
| { | ||
| protected $facebook; | ||
| protected $errorMessage; | ||
|
|
||
| public function __construct(BaseFacebook $facebook) { | ||
|
||
| $this->facebook = $facebook; | ||
| } | ||
| /** | ||
| * Returns error message if an executed function returned a failure (false value). | ||
| * @return string | ||
| */ | ||
| public function getErrorMessage(){ | ||
|
||
|
|
||
| return empty($this->errorMessage) ? '' : $this->errorMessage; | ||
| } | ||
|
|
||
| /** | ||
| * Retrieves available user information from Facebook for the logged in user. Available information | ||
| * depends on what access privileges the user has granted to your app. | ||
| * @return string|null | ||
| */ | ||
| public function getUserInfromation() | ||
| { | ||
| $access_token = self::get_access_token(); | ||
|
||
|
|
||
| try { | ||
| /* Adding the locale parameter is important, because otherwise Facebook api might localize some | ||
| * variable values, such as gender. | ||
| */ | ||
| $me = json_decode(file_get_contents("https://graph.facebook.com/me?access_token={$access_token}&locale=en_US")); | ||
|
||
| } | ||
| catch (\Exception $e) | ||
|
||
| { | ||
| $this->errorMessage = $e->getMessage(); | ||
|
|
||
| return null; | ||
| } | ||
|
|
||
| return $me; | ||
|
||
| } | ||
| /** | ||
|
||
| * Retrieves the profile picture of the logged in user in binary format, so that you can | ||
| * save it locally. | ||
| * @return string|null | ||
| */ | ||
| public static function getProfilePicture() | ||
| { | ||
| $facebookUID = $this->facebook->getUser(); | ||
|
|
||
| if (empty($facebookUID)) { | ||
|
|
||
|
||
| return null; | ||
| } | ||
|
|
||
| try { | ||
| $binary_image = file_get_contents("http://graph.facebook.com/{$facebookUID}/picture?type=large"); | ||
|
||
| return $binary_image; | ||
| } | ||
| catch (\Exception $e) | ||
|
||
| { | ||
| $this->errorMessage = $e->getMessage(); | ||
|
|
||
| return null; | ||
| } | ||
| } | ||
| /** | ||
| * Publishes a message to user's Facebook stream as the user. You application name will be displayed at the bottom | ||
| * of the message. | ||
| * REQUIRES Facebook access permission "publish_stream" | ||
| * @param Rohea\FacebookBundle\Models\streamPost $streamPost Stream post object | ||
| * @param string $accessToken Optional Facebook Access token, if not given, logged in user is used | ||
| * @return boolean | ||
| */ | ||
|
|
||
|
||
| public function publishStream(BaseMessage $streamPost, $accessToken = null) | ||
| { | ||
| if (empty($accessToken)) { | ||
| $accessToken = $this->facebook->getAccessToken(); | ||
| } | ||
| if (empty($accessToken)) { | ||
| throw new \Exception('No facebook access token, cannot post to stream'); | ||
|
||
| } | ||
|
|
||
| $streamPost->setAccessToken($accessToken); | ||
| $message = $streamPost->formatData(); | ||
|
|
||
| try | ||
| { | ||
|
||
| $result = $this->facebook->api( '/me/feed/', 'post', $message ); | ||
| } | ||
| catch (\Exception $e) | ||
|
||
| { | ||
| $this->errorMessage = $e->getMessage(); | ||
|
|
||
| return false; | ||
| } | ||
|
|
||
| return true; | ||
| } | ||
| /** | ||
| * Publishes a message to user's Facebook page as the page. | ||
| * REQUIRES Facebook access permission "manage_pages" | ||
| * @param Rohea\FacebookBundle\Models\streamPost $streamPost Stream post object | ||
| * @param string $pageID Your page facebook id. You can see this for examnple in your browser uri-bar when browsing the page. | ||
| * @return boolea | ||
| */ | ||
| public function publishPage(BaseMessage $streamPost, $pageID) | ||
| { | ||
| try | ||
|
||
| { | ||
| $accessToken = $this->getPageAccessToken($pageID); | ||
| $streamPost->setAccessToken($accessToken); | ||
| $message = $streamPost->formatData(); | ||
| $result = $this->facebook->api( "/{$pageID}/feed/", 'post', $message ); | ||
| } | ||
| catch (\Exception $e) | ||
|
||
| { | ||
| $this->errorMessage = $e->getMessage(); | ||
|
|
||
| return true; | ||
| } | ||
|
|
||
| return true; | ||
| } | ||
| /** | ||
| * Attempts to query access token for give Facebook page | ||
| * REQUIRES Facebook access permission "manage_pages" | ||
| * @param string $pageID Facebook page id | ||
| * @throws \Exception | ||
| * @return string | ||
| */ | ||
| public function getPageAccessToken($pageID) | ||
| { | ||
| $page_info = $this->facebook->api("/$pageID?fields=access_token"); | ||
|
||
|
|
||
| if( empty($page_info['access_token']) ) { | ||
|
||
| throw new \Exception("Could not retrieve access token for the page $pageID"); | ||
| } | ||
|
|
||
| return $page_info['access_token']; | ||
| } | ||
| } | ||
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
the license header should be the FOS one. Authorship for classes is kept through the
@authorannotation in the phpdoc of the class