如何获取 Facebook 用户的信息并将其插入数据库?

2023-12-27

我不知道如何问它,但我正在尝试自学如何创建一个使用图形 api 的程序。我见过的大多数教程都是较旧的,我不知道它们现在有多相关。本质上,我试图获取有人点击我的应用程序的“东西”,它说,这个应用程序需要您的用户名等,然后允许或不允许。

我希望它获取信息,然后将其插入数据库。我正在使用 php 并且有一个域。

如果我能获取数据,我可以毫无问题地插入数据。我不明白该怎么做。

很抱歉问了一个模糊的问题,我已经搜索过。不要求您为我编写代码,只是为我指明正确的方向,也许是一个现代教程来完成我所要求的事情。谢谢。


1)从这里创建一个 Facebook 应用程序:

http://developers.facebook.com/apps http://developers.facebook.com/apps

并使用您的域进行配置。

这一步非常简单,输入您想要的任何命名空间作为您的应用程序名称,然后检查您的应用程序是否将用作“应用程序和登录页面”(不是粉丝页面或相关页面),最后指定您所在的 URL将使用 Facebook API(将 Canvas URL 留空)。

请注意,我相信 Facebook API 需要 HTTPS URL,但我不知道为什么仍然允许 HTTP,所以现在不用担心。

登录配置:

设置网址:http://yourdomain.com/ http://yourdomain.com/

应用程序配置:

http://yourdomain.com/myfacebookapp/ http://yourdomain.com/myfacebookapp/

因此,当用户访问:

http://apps.facebook.com/yourappName http://apps.facebook.com/yourappName

意味着用户确实正在浏览该页面中的第一个链接(假设index.php)你需要从下面做所有的事情。

仅供参考,此时您还可以为您的应用程序设置徽标、管理管理员并获取您稍后将在 PHP 文件中使用的应用程序 ID 和密码。

(如果你在这一步感到困惑你可以谷歌搜索,这个配置很容易找到)

2)我总是使用这些文件将我的 PHP 环境与 Facebook API 链接起来,这是来自我的 Dropbox 的链接:https://www.dropbox.com/s/itw4pav1f7a9vez/files.rar https://www.dropbox.com/s/itw4pav1f7a9vez/files.rar

3)将这些文件放在名为的文件夹中fb.

4)我将向您展示如何从用户处获取数据和图片,但首先用户必须允许您的应用程序在登录应用程序时获取此信息。

因此,对于这个例子,我将使用一个简单的登录按钮:

(不要忘记替换您的应用程序 ID 和密钥,注意“xxx”和“yyy”)

<?php

require 'fb/facebook.php';

$facebook = new Facebook(array(
  'appId'  => 'xxx',
  'secret' => 'yyy',
));

// Check if user is already logged
$user = $facebook->getUser();

if ($user) {
  try {
    $user_profile = $facebook->api('/me');
  } catch (FacebookApiException $e) {
    error_log($e);
    $user = null;
  }
}

// Get login or logout URL
if ($user) {
  $logoutUrl = $facebook->getLogoutUrl();
} else {
  $loginUrl = $facebook->getLoginUrl();
}

?>
<html xmlns:fb="http://www.facebook.com/2008/fbml">
  <head>
    <title>Facebook PHP SDK</title>
  </head>
  <body>
    <h1>Facebook PHP SDK</h1>

    <?php if ($user): ?>
      <a href="<?php echo $logoutUrl; ?>">Logout</a>
    <?php else: ?>
      <div>
        <a href="<?php echo $loginUrl; ?>">Login with Facebook</a>
      </div>
    <?php endif ?>

    <h3>PHP Session</h3>
    <pre><?php print_r($_SESSION); ?></pre>

    <?php if ($user): ?>
      <h3>Your picture</h3>
      <img src="https://graph.facebook.com/<?php echo $user; ?>/picture">

      <h3>Your info (/me)</h3>
      <pre><?php print_r($user_profile); ?></pre>
    <?php else: ?>
      <strong><em>You are not connected.</em></strong>
    <?php endif ?>
</html>

5)上面的示例使用 Facebook PHP SDK,没有 JavaScript。因此,如果用户想要登录并授权您的应用程序获取信息,那么整个页面将被重定向到您的应用程序的 Facebook 权限页面,然后返回到您的 Facebook 应用程序的主页(在配置中指定)你的申请)。

6)下面的代码将执行与上面相同的操作,但使用 JavaScript 和自定义 Facebook 登录按钮,允许您按照您在问题中所写的方式设置特殊权限。另一个区别是会出现一个弹出窗口,而不是重定向整个页面。

(不要忘记替换您的应用程序 ID 和密钥,注意“xxx”和“yyy”)

<?php

require 'fb/facebook.php';

$facebook = new Facebook(array(
  'appId'  => 'xxx',
  'secret' => 'yyy',
));

// Check if user is already logged
$user = $facebook->getUser();

if ($user) {
  try {
    $user_profile = $facebook->api('/me');
    $logoutUrl = $facebook->getLogoutUrl();
  } catch (FacebookApiException $e) {
    $user = null;
  }
} else {
    $loginUrl = $facebook->getLoginUrl();
}

?>
<html xmlns="http://www.w3.org/1999/xhtml">
    <head>
        <title>Facebook PHP SDK</title>
    </head>
    <body>
        <fb:login-button size="small" onlogin="after_login_button()" scope="email, user_about_me, user_birthday, user_status, publish_stream, user_photos, read_stream, friends_likes">Login with facebook</fb:login-button>
        <div id="fb-root"></div>
        <script>
            window.fbAsyncInit = function() {
            FB.init({
              appId: '<?php echo $facebook->getAppID() ?>',
              cookie: true,
              xfbml: true,
              oauth: true
            });
            
            // This is used by Facebook login button
            FB.Event.subscribe('auth.login', function(response) {
              if (response.authResponse) {
                 // Specify the login page where Facebook login button is located
                 window.location = 'main.php';
              }
            });
            FB.Event.subscribe('auth.logout', function(response) {
                window.location = 'logout.php';
            });
          };
          (function() {
            var e = document.createElement('script'); 

            e.async = true;
            e.src = document.location.protocol + '//connect.facebook.net/en_US/all.js';

            document.getElementById('fb-root').appendChild(e);
          }());
          
          function after_login_button(){
            FB.getLoginStatus(function(response) {
                if (response.status == 'connected') {
                    // If user is connected, redirect to below page
                    window.location = 'main.php';
                }
            }, true);
          }
        </script>
    </body>
</html>

7)正如您所看到的,Facebook 登录按钮中的范围属性决定了您的应用程序需要从用户(例如电子邮件)获得哪些特殊权限和信息(除非获得授权,否则始终是私有的)。


8)要添加某些内容,您可以使用以下命令仅从某人那里获取公共信息:

// For example: Your Facebook friend's profile is http://www.facebook.com/foobar
$myFriend = $facebook->api('/foobar');
// For example: Your Facebook friend's profile is http://www.facebook.com/users/1002020300010
$myFriend = $facebook->api('/1002020300010');
// Print the name
echo $myFriend['name'];
// Print all data
print_r($myFriend);

并且,为了获取您的 Facebook 好友的照片,只需执行以下操作:

<img src="https://graph.facebook.com/foobar/picture">

Or:

<img src="https://graph.facebook.com/1002020300010/picture">

最后,假设您拥有所需的所有用户信息,那么现在您可以将其全部保存到数据库中,而不会出现问题或限制。

希望这有助于作为参考。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何获取 Facebook 用户的信息并将其插入数据库? 的相关文章

  • 如何使用用户代理标头以不同方式检测 Android 手机和 Android 平板电脑?

    对于我的网站 我需要能够区分 Android 平板电脑访问和 Android 手机访问的区别 在将页面发送给用户之前需要对其进行检测 因此不能使用 JavaScript 检查屏幕分辨率 目前我用它来检测 Android 设备 stripos
  • 如何在使用 Piwik 进行分析的页面上显示点击/访问计数器

    我想在主页上显示当天的访问量 该页面由 Piwik 跟踪 如何将 API 与 PHP 结合使用来获取今天的 唯一 访问量和点击量 以便我可以将它们显示在页面上的某个位置 result file get contents http mysit
  • 配置 htaccess 以使用 Angular 和 PHP 路由

    我正在尝试使用 Angular 4 和 PHP 路由 但我无法配置它以便同时使用两者 我可以让它与其中之一一起工作 但不能同时与两者一起工作 这是我的文件夹结构 root index html vendor bundle js other
  • symfony 2.0足够稳定可以使用吗? [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 我怀疑是否交响乐2 0够稳定可以使用吗 因为我从来没有用过Symfony before 看起来交响乐2比以前的版本好得多 我不想在几个月后重新学
  • 无法将 Facebook 页面的提要添加到我的应用程序中

    我希望我的应用程序只显示 Facebook 页面发布的帖子 无需任何身份验证 这是代码 public class Main extends Activity Override protected void onCreate Bundle s
  • PHP如何计算时差? [复制]

    这个问题在这里已经有答案了 我必须计算日期时间差 如何在 PHP 中做到这一点 我需要准确的小时 分钟和秒 有人有这方面的脚本吗 Use the diff 方法 http www php net manual en datetime dif
  • 为什么 PHP 字符串连接运算符是点 (.)? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 如何按年和月对 WordPress 帖子进行分组?

    我正在尝试创建一个带有后查询并在输出中具有以下结构的函数 2021 January 1 Post Title 2 Post Title March 3 Post Title 2020 May 4 Post Title 这是我到目前为止所做的
  • 使用 Poedit 创建 POT 文件

    我正在拼命地尝试为我的 php 新应用程序创建一个目录 in 1 我创建了一个文件 trans php 其中放置了所有要翻译的值 例如 这是我的文件 2 我打开Poedit 在 路径 中这是我输入的内容 见图 然后我保存文件 php 的相同
  • JWT 中的注销不起作用

    我是 Laravel 的新手 我安装了 JWT 并登录 所以它工作并生成了一个令牌 当我在邮递员中注销时它返回 true 但一次又一次它返回 true 和 auth gt 用户 注销后始终返回用户 这是我的代码 public functio
  • Laravel 9.x 登录应用程序时目标类不存在错误

    尝试为管理面板制作一个登录应用程序以轻松编辑网站的其余部分 我有一个名为AuthController它执行多种操作 例如登录 注销 我决定只使用一个 而不是使用两个不同的控制器 当我去 login在我的浏览器上它返回Target class
  • 无法在Phalcon php中调用除indexAction之外的indexController的操作

    我的 xampp htdocs 目录中有一个名为 phalcon 的简单项目 并且我将 apache 配置为指向该文件夹 以便我可以在浏览器中转到 phalcon 当我尝试打开索引 默认 以外的索引控制器视图时 会出现问题 例如 我在索引控
  • PHP 中的 __DIR__ 和 dirname(__FILE__) 有什么区别吗?

    对我来说看起来是一样的 但我不确定 因为有很多项目使用dirname FILE 他们的结果是完全一样的 所以 这没有什么区别 例如 以下两行 var dump dirname FILE var dump DIR 两者都会给出相同的输出 st
  • PHP:在执行 php 脚本时显示“正在加载”页面

    这就是我现在所拥有的 我有一个网页 当访问该网页时 它会通过开放 API 连接到 Surveygizmo com 检索大量数据 然后将这些数据返回给我进行处理 此过程大约需要 10 12 秒 在执行时 页面只是处于 正在加载 状态 并且我会
  • Doctrine QueryBuilder 重用部件

    我想计算所有符合我的条件的字段 并使用学说查询生成器逐页获取它们 我生成的查询取决于我的过滤器字段 第一部分是计算记录 以便我可以计算页数 qb em gt createQueryBuilder qb gt select COUNT m i
  • PHP随机输出数组元素

    我如何从大约 20 个元素的数组中随机回显 5 个元素 Thanks 这有效吗 values array rand input 5 或者 作为更灵活的功能 function randomValues input num 5 return a
  • 如何获得永不过期的 Facebook_Account_(即页面)访问令牌?

    由于一些不幸的术语选择 这个主题很难在 Google 上搜索到 所以在我问问题之前 先快速澄清一下 Facebook 帐户 即一个人的顶级个人帐户 可以有子帐户 公司 品牌 名人等 不幸的是 Facebook 称之为 帐户 与这些 帐户 交
  • 如何编辑 Woocommerce 单一产品元模板中显示的内容?

    我正在为客户做一些工作并使用 wordpress woocommerce 他们要求我将类别移动到我已经完成的单个产品页面上的产品名称下 但他们不希望它打印 类别 类别 1 类别 2 等 他们希望删除 类别 并且它实际上只列出类别的名称 而不
  • 带缓存的简约 PHP 模板引擎,但不带 Smarty?

    有大量的问题 https stackoverflow com search q php template engine cache寻找 正确的 PHP 模板引擎 但它们都不专注于缓存 有谁知道一个轻量级 高质量 基于 PHP 5 的模板引擎
  • Facebook Graph API“/userid/feed”返回空白

    我正在使用 Facebook C SDK 但似乎无法使用 Graph API 获取反馈数据 我已从用户那里获得了以下扩展权限 范围 离线访问 publish stream publish checkins create event read

随机推荐

  • IOS 覆盖本地通知

    我创建了一个Local Notification当某个按钮 SetButton 被点击 我现在的问题是如果SetButton再次按下 它不会覆盖第一次按下 它会显示 2 个通知 依此类推 如何确保第二次按按钮会覆盖第一次按按钮并且不会累积通
  • 后台工作者是一个线程吗? (C#)

    后台工作者是一个线程吗 我应该什么时候使用它 是的 它基本上就像一个线程 但具有额外的功能 通知您进度和完成时间的事件 每当您需要执行可能需要一段时间的操作 例如计算 文件或数据库读 写 Web 请求等 并且您不希望 GUI 在执行时显得无
  • 如何挂钩 MANAGED(.NET) 进程并收集该进程内的信息?

    我需要挂钩托管 C C CLI 进程 我需要查找有关它有多少个窗口 其关联控件及其属性 的信息并将其发送到用 C 托管代码编写的目标应用程序 为此我需要做什么 我是否需要探索该托管进程的 IAT 导入地址表 和 EAT 导出地址表 我需要用
  • Rails 从现有表生成模型?

    我对 Rails 框架非常陌生 想知道如何基于现有表生成模型 例如 我有一个名为 person 的表 并且想要根据该表中的列生成模型 但是 每当我使用 ruby script generate model Person skip migra
  • video-react 属性宽度和高度不起作用

    按照这个doc https video react js org components player 我们可以在属性中添加玩家的宽度和高度
  • 在 text/xml 值中编码 CR-LF 换行符的正确方法是什么?

    与可以执行任何操作的 application xml 文件或将所有空白序列转换为单个空格字符的标准化字符串值相反 我在这里专门询问具有字符串值的文本 xml 文件的上下文 为了简单起见 假设我仅在 UTF8 编码文件中使用 ASCII 字符
  • 是否可以将Python Seaborn与plotly集成

    我正在为plot ly寻找python seaborn的一些指导 是否可以在plot ly 上提供seaborn 图表 有可用的示例或教程吗 请帮忙 提前致谢 Seaborn 基于 matplotlib Plotly 可以转换 matplo
  • 带有 json 文件的 C++ Boost 程序选项

    可以使用 boost 程序选项库 http www boost org doc libs 1 64 0 doc html program options html http www boost org doc libs 1 64 0 doc
  • 启用链接时优化会导致链接器错误吗?

    我有可以正常编译和链接的代码 我现在尝试启用链接时优化 但添加 flto我的编译器和链接器标志导致链接器错误 usr local lib libboost thread a thread o In function void boost t
  • 同一活动中不同可组合功能的不同视图模型

    我在堆栈溢出的某个地方读到过 如果您正在创建新应用程序 则可以完全跳过使用 Fragment 只需使用可组合函数来表示您的屏幕即可 但是 在使用片段时 我们可以针对不同的片段 屏幕使用不同的视图模型 我们可以通过可组合函数实现相同的目标吗
  • component.clientId 和 p:component() 生成的客户端 id 之间的区别

    我正在尝试检索 p dataList 内的 h panelGroup 的客户端 ID 我尝试了两种方法 1 使用component clientId 例如
  • 为 Laravel Blade 模板解析字符串而不是文件

    我需要缓存 CMS 生成的远程刀片模板 以使应用程序的公共接口保持最新 理想情况下 我可以使用 file get contents 和缓存每周检查一次更新 有没有办法让 Laravel 使用变量的内容而不是文件作为刀片模板 我找不到让 La
  • Pylance 不允许我导航到源代码,而是将我带到 .pyi 存根

    我正在使用 pylance 作为 vs code 它工作得非常好 除了因为我使用它 当我尝试从已安装的库检查代码时 我只能得到存根 我认为是由 pylance 生成的 For example the information shown ab
  • 有没有办法获取unix套接字连接另一端的uid

    有没有办法让 UNIX 域套接字侦听器仅接受来自特定用户的连接 chmod chown不适用于抽象套接字 afaik 或者换句话说 获取传入连接的 uid 在 Linux 上 Dbus 在Linux上使用抽象unix socket 有一个功
  • 如何在数组中搜索子字符串匹配项?

    我需要在 JavaScript 中搜索数组 搜索将仅匹配字符串的一部分 因为字符串将包含其他组件 然后我需要返回成功匹配的数组元素和完整字符串 Example const windowArray item thing id 3 text c
  • Android Seekbar - 只允许用拇指进行更改?

    我有一个搜索栏 我只想允许用拇指 手柄部分进行更改 如果用户点击其他任何地方 我希望忽略该点击 是否有固有的属性可以做到这一点 如果没有 我已经知道我可以设置一个 onTouch 监听器并返回true 禁用 它 但是有没有办法检测拇指何时被
  • 打字稿和 d3

    我有一个使用 d3 库的应用程序 在打字稿代码中 为了成功使用 d3 即 没有编译器错误 TS2686 d3 引用 UMD 全局 但当前文件是模块 我必须包含以下行 import as d3 from d3 问题是它会发出 require
  • QT,如何聚焦虚拟键盘,并使用键盘控制虚拟键盘

    我在嵌入式设备上使用Qt5的虚拟键盘 没有鼠标 键盘不是完整的PC键盘 而是只有十一个键 包括上 下 左 右 enter esc 所以我想专注于虚拟键盘 并使用上 下 左 右 回车来控制虚拟键盘 模拟鼠标点击虚拟键 怎么做 doc qt i
  • 如何使用 winmerge 行过滤器忽略包含特定单词的行?

    我有许多文件包含以下类型的行 version Revision 1 xxx 我希望在使用 winmerge 进行比较时忽略这种类型的行 我尝试过使用线路滤波器 但是 直到无法做到这一点 有人可以在这方面帮助我吗 你实际上可以这样做线路滤波器
  • 如何获取 Facebook 用户的信息并将其插入数据库?

    我不知道如何问它 但我正在尝试自学如何创建一个使用图形 api 的程序 我见过的大多数教程都是较旧的 我不知道它们现在有多相关 本质上 我试图获取有人点击我的应用程序的 东西 它说 这个应用程序需要您的用户名等 然后允许或不允许 我希望它获