如何将您的信息从dev.to加载到您的网站/应用上

经过一段时间的免维护后,在我的网站上工作时,我注意到我以前一直在手工编码到在DEV平台上撰写的博客文章的链接。这是非常不守规矩的,在代码库中看起来也不是很好,而且我继续这样做也没有效率。

我的网站是在PHP上运行的,并且我使用的Pico CMS具有非常好的插件设置,因此我决定为Pico创建一个新插件,以编程方式为我抓取帖子,而不是继续以前的硬编码疯狂。

为了简化事情,对于以前可能从未使用过PICO之类的读者,我将向您展示常规的PHP实现,而不使用任何框架。

开始之前

要继续并使用下面的实现,您首先需要获取DEV API的API密钥。这非常简单,因此请在开始访问您的密钥之前执行以下步骤:

  1. 转到您的个人资料设置页面
  2. 输入您想要的API密钥说明
  3. 请点击 Generate API Key
  4. 复制生成的密钥
  5. 完成?

DevPostFetcher类

/**
 * DevPostFetcher - A class to fetch posts from your dev.to profile
 * @author James Robb
 * @version 1.0.0
 */
class DevPostFetcher
{
  /** @var int The page of posts to access */
  private $page = 1;
  /** @var int How many posts to provide per page request */
  private $per_page = 10;
  /** @var string dev.to API Key to access posts */
  private $api_key;

  public function __construct(string $api_key) {
    $this->api_key = $api_key;
  }

  /**
   * @param   int   $per_page The amount of posts to fetch per page request
   * @return  void
   */
  public function setPerPage(int $per_page): void {
    $this->per_page = $per_page;
  }

  /**
   * @return  int
   */
  public function getPerPage(): int {
    return $this->per_page;
  }

  /**
   * @param   int   $page  The page of posts to fetch
   * @return  void
   */
  public function setPage(int $page): void {
    $this->page = $page;
  }

  /**
   * @return  int
   */
  public function getPage(): int {
    return $this->page;
  }

  /**
   * @throws Exception if the DEV API curl request fails
   * @return array An associative (key => value) array of DEV posts
  */
  public function fetch() {
    $page = $this->getPage();
    $per_page = $this->getPerPage();
    $api_key = $this->api_key;
    $ch = curl_init(
      "https://dev.to/api/articles/me?page=$page&per_page=$per_page"
    );
    $requestHeaders = (
      "api-key:$api_key"
    );

    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_HTTPHEADER, $requestHeaders);
    $posts = curl_exec($ch);
    if (curl_errno($ch)) {
      throw new Exception(curl_error($ch));
    }
    curl_close($ch);
    return json_decode($posts, true);
  }
}

该价格围绕3个私有财产展开:

  1. $page -我们要访问的帖子页面
  2. $per_page -每个页面请求加载多少帖子
  3. $api_key -我们之前生成的api密钥

我们也有一个getter和setter $page$per_page 设置,这些对分页很有用,例如,我们将在本文后面看到。

旁注

有时,您可能会在本地计算机上遇到与SSL证书有关的成交量曲错误,要解决这些问题,您可以将以下代码行添加到 fetch() 方法:

  curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
  curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);

不要在生产环境中使用这些内容:仅在本地开发中使用,因为这是一个安全问题,并且您不希望不安全的请求在实时服务器上传入和传出。

使用价格

最新的帖子

假设我们很高兴只从您的帐户中获取最新的10条帖子,而您想显示它们,例如,可以执行以下操作:


  $devPosts = new DevPostFetcher("your_api_key");
  $devPostsList = $devPosts->fetch();
?>
    foreach($devPostsList as $post): ?>
  • href=" echo $post('url'); ?>"> echo $post('title'); ?>
  • endforeach; ?>

分页帖子

假设我们要对帖子进行分页,这很简单:


  $devPosts = new DevPostFetcher("your_api_key");
  $firstPagePosts = $devPosts->fetch(); // posts 1 - 10
  $devPosts->setPage(2);
  $secondPagePosts = $devPosts->fetch(); // posts 11 - 20
?>

注意:在本系列的下一篇文章中,我们将使用 DevPostFetcher 类,作曲家和飞行。

加载的数量超过默认的帖子数

您现在可能已经猜到了,但是如果您希望每次提取加载10个以上的帖子,我们可以这样做:


  $devPosts = new DevPostFetcher("your_api_key");
  $devPosts->setPerPage(20);
  $firstPagePosts = $devPosts->fetch(); // posts 1 - 20
?>

放在一起

一个完整的例子可能是这样的:


$devPosts = new DevPostFetcher("your_api_key");
$devPosts->setPerPage(5);
$devPosts->setPage(2);
$devPostsList = $devPosts->fetch();
?>
    foreach($devPostsList as $post): ?>
  • href=" echo $post('url'); ?>"> echo $post('title'); ?>
  • endforeach; ?>

结论

DEV API是基本的,但根据我尝试使用它的经验而形成,为什么不亲自检查一下呢?

本系列文章将继续我们使用来构建分页博客应用程序。 DevPostFetcher 这篇博文,Composer和Flight中的价格。

资讯来源:由0x资讯编译自DEV,原文:https://dev.to/jamesrweb/programmatically-loading-posts-from-dev-to-onto-your-site-10je ,版权归作者所有,未经许可,不得转载
你可能还喜欢