如何将您的信息从dev.to加载到您的网站/应用上
经过一段时间的免维护后,在我的网站上工作时,我注意到我以前一直在手工编码到在DEV平台上撰写的博客文章的链接。这是非常不守规矩的,在代码库中看起来也不是很好,而且我继续这样做也没有效率。
我的网站是在PHP上运行的,并且我使用的Pico CMS具有非常好的插件设置,因此我决定为Pico创建一个新插件,以编程方式为我抓取帖子,而不是继续以前的硬编码疯狂。
为了简化事情,对于以前可能从未使用过PICO之类的读者,我将向您展示常规的PHP实现,而不使用任何框架。
开始之前
要继续并使用下面的实现,您首先需要获取DEV API的API密钥。这非常简单,因此请在开始访问您的密钥之前执行以下步骤:
- 转到您的个人资料设置页面
- 输入您想要的API密钥说明
- 请点击
Generate API Key
- 复制生成的密钥
- 完成?
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个私有财产展开:
-
$page
-我们要访问的帖子页面 -
$per_page
-每个页面请求加载多少帖子 -
$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中的价格。