분류 php

dev.to에서 사이트 / 앱으로 게시물을 로드 하는 방법

컨텐츠 정보

  • 조회 461 (작성일 )

본문

유지 관리가 되지 않은 후 웹 사이트에서 작업하는 동안 DEV 플랫폼에서 작성한 블로그 게시물에 대한 링크를 직접 코딩하고 있음을 알게 되었습니다. 이것은 매우 드물고 코드베이스에서 훌륭하게 보이지 않았으며 계속해서 효율적이지 않았습니다.


https://dev.to/jamesrweb/programmatically-loading-posts-from-dev-to-onto-your-site-10je 


내 웹 사이트는 PHP에서 실행되며 정말 멋진 플러그인 설정을 가진 Pico CMS를 사용하므로 이전에 하드 코딩 된 광기를 계속하지 않고 프로그래밍 방식으로 게시물을 가져 오기 위해 Pico 용 새 플러그인을 만들려고 결정했습니다.


이전에 PICO와 같은 것을 사용하지 않은 독자에게는 상황을 단순화하기 위해 프레임 워크를 사용하지 않고 일반적인 PHP 구현을 보여 드리겠습니다.


시작하기 전에 


아래 구현을 따르고 사용하려면 먼저 DEV API에 대한 API 키를 가져와야 합니다. 이 작업은 매우 간단하므로 키에 액세스하기 전에 다음 단계를 따르십시오.

  1. 프로필 설정 페이지로 이동
  2. 원하는 API 키에 대한 설명을 입력하십시오.
  3. API 키 생성을 클릭하십시오
  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 키

또한 $ page 및 $ per_page 설정에 대한 getter 및 setter가 있으며,이 글의 뒷부분에서 볼 수 있듯이 페이지 매김에 유용합니다.


각주 


때로는 로컬 컴퓨터의 SSL 인증서와 관련된 컬 오류가 발생할 수 있습니다. 이러한 문제를 해결하기 위해 다음 코드 줄을 fetch() 메서드에 추가 할 수 있습니다.


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


프로덕션 환경에서는 사용하지 마십시오. 보안 문제이므로 라이브 서버에서 안전하지 않은 요청이 들어오고 나가는 것을 원하지 않으므로 로컬 개발에서만 사용하십시오.


Class 사용 


최근 게시물 


귀하의 계정에서 최근 10 개의 게시물 만 가져오고 기꺼이 표시하려는 경우 다음과 같은 작업을 수행 할 수 있습니다.


<?php
  $devPosts = new DevPostFetcher("your_api_key");
  $devPostsList = $devPosts->fetch();
?>
<ul>
  <?php foreach($devPostsList as $post): ?>
    <li>
      <a href="<?php echo $post['url']; ?>">
        <?php echo $post['title']; ?>
      </a>
    </li>
  <?php endforeach; ?>
</ul>


페이지 매김 게시물 


우리가 게시물에 페이지를 매기고 싶다고 가정 해 봅시다.


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


참고 :이 시리즈의 다음 게시물에서는 DevPostFetcher 클래스 인 ComposerFlight를 사용하여 적절하게 페이지가 지정된 게시물 응용 프로그램을 작성합니다.


기본 게시물 수보다 더 많이 로드 


아마 지금까지 짐작할 수 있지만 가져 오기 당 10 개 이상의 게시물을 로드 하려면 다음을 수행하십시오.


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


함께 모아서 


전체 예는 다음과 같습니다.


<?php
$devPosts = new DevPostFetcher("your_api_key");
$devPosts->setPerPage(5);
$devPosts->setPage(2);
$devPostsList = $devPosts->fetch();
?>
<ul>
  <?php foreach($devPostsList as $post): ?>
    <li>
      <a href="<?php echo $post['url']; ?>">
        <?php echo $post['title']; ?>
      </a>
    </li>
  <?php endforeach; ?>
</ul>

결론적으로 


DEV API는 기본이지만 이 기능을 사용해 본 경험을 바탕으로 잘 구성되어 있습니다. 왜 직접 확인하지 않겠습니까?


이 시리즈는 ComposerFlight라는 이 게시물의 DevPostFetcher 클래스를 사용하여 페이지가 매겨진 블로그 응용 프로그램을 계속 작성합니다.