使用Facebook的SDK判斷來訪者是否已經按讃并成為本站粉絲團的成員
今天公司裡要做活動,其中有一項活動內容是要求來訪者按一下facebook粉絲團的讃,按了讃之後贈送現金.Facebook被墻大家眾所周知,在百度搜了一下發現因為被墻的原因導致國內涉及到Facebook開發的極少.
Facebook的API說簡單確實很簡單,只需要用iframe放html代碼就行了,但是這次因為涉及到了現金,我不想用curl抓取源碼模糊判斷,那樣很不准確,加上國內極少有關於Facebook的內容,就算是有也主要是新聞一類的,偶爾有幾篇技術文章也是幾年前老掉牙的玩意,現在拿過代碼來根本就不能用,迫於無奈只好啃了一晚上的英文版API手冊,說到手冊順便提一下我們看手冊的時候最容易找到的就是https://developers.facebook.com/docs/reference/php,這個說明中提供了很多內置的方法讓我們直接調用需要的內容,但是因為是facebook預設的因此提供的方法無法滿足很特殊的需求(就像今天我要實現的功能就非常特殊),最終我找到了https://developers.facebook.com/docs/reference/fql/,這裡主要講述facebook的FQL(這玩意很強大,只要你能想到的功能幾乎都能實現,本例就是得益于使用FQL才得以解決)
在丟代碼之前我首先簡單的提一下,要想開發facebook的程序就必須要申請到他的appid和secret,申請方法很簡單從https://developers.facebook.com/apps/?action=create申請就行了,礙於篇幅不再贅述(如果感覺有難度的話可以進我的QQ群223494678討論).有了這兩個玩意之後你還需要下載facebook的SDK才行,下載地址是https://github.com/facebook/facebook-php-sdk,下載之後解壓縮,只拿出src文件夾來就足夠用了,別的都可以刪掉,下邊是代碼,我有逐行加入註釋
<?PHP
//調用函數把結果賦值給變數
$a=is_Like('213202422194942');
if($a[0]===TRUE) {
echo '已經按讃';
}else{
echo $a[1];
}
unset($a); //釋放變數
die(); /**
判斷用戶是否已經按讃(粉絲團)
參數:
$pid:int型,粉絲團的id,這個值可以用firebug抓得到,如果不會可以進我的QQ群223494678討論
返回:
array(
0=>bool型,[已經按讃則TRUE;反之FALSE]
1=>str型,當[0]=FALSE時的提示內容
)
用法:
$a=is_Like('213202422194942');
if($a[0]===TRUE) {
echo '已經按讃';
}else{
echo $a[1];
}
/**/
function is_Like($pid){
if(trim($pid)=='') {return array(FALSE,'粉絲團的ID不可為空!');} //調用SDK
require('src/facebook.php'); //實例化對象
$FB=new Facebook(array(
'appId' => '填寫你申請到的內容',
'secret' => '填寫你申請到的內容',
'cookie' => true,
)); //如果對象建立失敗
if(!is_object($FB)) {
unset($FB);
return array(FALSE,'加載Facebook的API失敗!');
} //提取當前來訪者id
$uid = $FB->getUser();
if(!$uid) { //如果id提取失敗,則要求用戶登錄
$r=array(FALSE,'<a href="'.$FB->getLoginUrl(array('scope'=>'publish_stream')).'">點擊登入</a>');
}else{ //如果id提取成功
//用FQL查詢該用戶在page_fan表內是否有關注id=213202422194942的粉絲頁
$fql=$FB->api(array('method' => 'fql.query','query' => 'SELECT page_id from page_fan where page_id="'.$pid.'" and uid='.$uid.''));
if(is_array($fql) and isset($fql[0]['page_id']) and trim($fql[0]['page_id'])!='') {
$r=array(TRUE,'');
}else{
$r=array(FALSE,'尚未按讃!');
}
} //釋放變數
unset($pid,$fql,$uid,$FB);
return $r;
}
希望此文能起到拋磚引玉的作用
使用Facebook的SDK判斷來訪者是否已經按讃并成為本站粉絲團的成員的更多相关文章
- 【WIN10】判斷程序運行在哪個平台
其中的一個方法是: string x = AnalyticsInfo.VersionInfo.DeviceFamily; 判斷 x 的值,有”Windows.Mobile“,”Windows.Des ...
- Python 基礎 - for流程判斷
今天介紹另一個循環判斷式 for循環,首先,先寫一個很簡單的 for循環的代碼 #!/usr/bin/env python3 # -*- coding:utf-8 -*- for i in range ...
- Python 基礎 - while流程判斷
接續上次的代碼,是不是只有執行一次才就結束,想要再繼續猜,就要在執行一次,是不是有點挺麻煩的? 所以這次我們就來再多做一點點功能進去,讓代碼可以多次循環地執行代碼,Go.... 首先,我們先來了解一下 ...
- Python 基礎 - if else流程判斷
hmm~前面講了那麼多,終於可以稍稍的正式進入另一個階段,沒錯,要開始寫判斷式了 這次先從最簡單的判斷式開始,if else 開始- Go 首先,之前有寫有一個簡單的互動式 用戶輸入 的代碼,忘記了嗎 ...
- 判斷作業系統為 64bit 或 32bit z
有時我們在開發Windows 桌面應用程式時,會發生一些弔詭的事情,作業系統位元數就是一個蠻重要的小細節,若您寫的應用程式在Windows 的32bit 作業系統上可以完美的運行,但不見得在64bit ...
- 快充 IC BQ25896 如何判斷 手機插著 adapter 充電器時,adapter Iout 大於限制,adapter Vout 小於 限制,導致 battery 不但沒充電且還需放電。
若電池在 放電時,ICHGR 為0. 若電池在 充電時,ICHGR有變化. 下面有寫到 charge current 所以不是 discharge current 狀況: ...
- jquery選取所有checkbox和判斷是否全部checkbox已經被勾選
前言 勾選/取消勾選 全部勾選checkbox的時候 勾選/取消勾選 所有對應的checkbox 當所有對應checkbox有別勾選的時候, 全部勾選checkbox 也要被勾選 完整程式碼範例 前言 ...
- Javascript判斷function是否定義
jQuery可以用 isFunction() 來進行判斷 如果僅使用Javascript可以使用以下的方法 function isFunction(fn){ return typeof fn === ...
- 浅谈 facebook .net sdk 应用
今天看了一篇非常好的文章,就放在这里与大家分享一下,顺便也给自己留一份.这段时间一直在学习MVC,另外如果大家有什么好的建议或者学习的地方,也请告知一下,谢谢. 这篇主要介绍如何应用facebook ...
随机推荐
- Eclipse+Mingw+Boost 环境搭建
一.安装CDT插件 Eclipse是用Java的swt开发的,所以需要java虚拟机才能运行,jdk的配置方法网上一大堆,这里就不细说了.安装CDT的方法简单提一下,到Help->Eclipse ...
- Linux命令小结:fdisk
查看分区信息 分区信息包括容量.扇区数目.柱面数目.磁头数目和IO大小等信息. root@cvm:/# fdisk -l /dev/sda7 Disk /dev/sda7: 441.8 GB, 441 ...
- equals(==),toString
equals/==: 只有指向同一个对象是,才返回true. 特殊: String s1 = new String("hello"); String s2 = new String ...
- GNU M4 - GNU Project - 免费软件基金会(FSF)
-------------------------------------------------------------------------------------- GNU M4介绍: GNU ...
- 如何在子线程中使用Toast和更新UI
因为没一个Looper处理消息循环,所以子线程中无法使用Toast 方法: Looper.prepare(); Toast.makeText(getActivity(),"刷到底啦" ...
- radio button(单选按钮)
单选按钮只是input输入框的一种类型. 每一个单选按钮都应该嵌套在它自己的label(标签)元素中. 注意:所有关联的单选按钮应该使用相同的name属性. 下面是一个单选按钮的例子: <lab ...
- poj 3635/hdu 1676 Full Tank? 车辆加油+最短路
http://acm.hdu.edu.cn/showproblem.php?pid=1676 给出一张图,n<=1000,m<=10000. 有一辆车想从图的一个地方到达另外一个地方,每个 ...
- C++类库介绍
如果你有一定的C基础可能学起来比较容易些,但是学习C++的过程中又要尽量避免去使用一些C中的思想:平时还要多看一些高手写的代码,遇到问题多多思考,怎样才能把问题抽象化,以使自己头脑中有类的概念:最后别 ...
- Linux启动ftp服务器530 Permission denied解决方法(已试,行)
Linux启动ftp服务器530 Permission denied解决方法重新在虚拟机下安装了linux.现在我想启动linux自带的ftp服务器:#service vsftpd start . ...
- 【笔记】select2的使用
<script src="~/Scripts/jquery-1.10.2.js"></script> <script src="~/Cont ...