티스토리 뷰
개요
Phalcon
프레임워크를 이용한 클리앙 글 검색 REST API를 제작하는 법을 설명하고자 한다.
사전지식
- XAMPP, Composer, PhpStorm, Phalcon에 대한 기본 지식이 요구된다. 여기를 클릭하여 필요한 내용을 숙지한다.
Composer
$ compser require sunra/php-simple-html-dom-parser
- 클리앙의 HTML DOM 파씽을 위해
sunra/php-simple-html-dom-parser
라이브러리를 설치한다.
ReWrite Rules
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^((?s).*)$ index.php?_url=/$1 [QSA,L]
</IfModule>
- Phalcon의 Micro 클래스와 연동하기 위한 Pretty URLs 설정이다.
index.php
<?php
use Phalcon\Mvc\Micro;
require "vendor/autoload.php";
const CLIEN_BASE_URL = 'http://www.clien.net';
$app = new Micro();
$app->get("/v1/clien/articles/{keyword}/{page}", require("v1_clien_articles.php"));
$app->handle();
GET /v1/clien/articles/{keyword}/{page}
REST API를 정의하였다.keyword(검색어)
,page(페이수)
2개의 파라메터를 받아 클리앙에서 검색된 글의 목록을 JSON으로 반환하는 기능이다.
v1_clien_articles.php
<?php
use Phalcon\Http\Response;
use Sunra\PhpSimple\HtmlDomParser;
return function ($keyword, $page) use ($app) {
$html = HtmlDomParser::file_get_html('http://www.clien.net/cs2/bbs/zsearch.php?q=' . urlencode($keyword) . '&page=' . $page);
$articles = array();
$i = 0;
foreach ($html->find('div.post_subject') as $article) {
$path = $article->find('h1 > a', 0)->href;
$category = $article->find('h1 > a > em', 0)->text();
$title = str_replace(array($category, ' '), '', trim($article->find('h1', .0)->text()));
$reply_count = str_replace(array('[', ']'), '', $article->find('h5', 0)->text());
$content = $article->find('h4', 0)->text();
$date = $article->find('h3', 0)->text();
$i++;
$articles[$i] = array(
'url' => CLIEN_BASE_URL . $path,
'category' => $category,
'title' => $title,
'reply_count' => $reply_count,
'content' => $content,
'date' => $date
);
}
$res = new Response();
$res->setStatusCode(200);
$res->setContentType("application/json", 'UTF-8');
$res->setContent(json_encode(array_values($articles)));
return $res;
};
실행 결과
GET /v1/clien/articles/자전거/1
[
{
"url": "http://www.clien.net/cs2/bbs/board.php?bo_table=cm_lego&wr_id=761690",
"category": "[레고당]",
"title": "자전거자전거자전거자전거자전거",
"reply_count": "12",
"content": "자전거.. 반대방향 자전거. ...",
"date": "2014.05.09"
},
{
"url": "http://www.clien.net/cs2/bbs/board.php?bo_table=cm_bike&wr_id=151970",
"category": "[자전거당]",
"title": "사고 모음집 (차대차 차대자전거자전거대자전거자전거대오토바이 차대벽)",
"reply_count": "6",
"content": " 중국입니다. 우선멈춤과 차선만 지켜도 90%는 안생길 사고네요 ",
"date": "2012.08.03"
},
{
"url": "http://www.clien.net/cs2/bbs/board.php?bo_table=cm_bike&wr_id=550165",
"category": "[자전거당]",
"title": "내 자전거는 별로 안 소중해도 타인의 자전거는 소중한 자전거일수 있는데..",
"reply_count": "22",
"content": "중입니다. 앞에 자전거걸어두는 곳에 자전거걸어두고 테이블에 앉아서 친구랑 간단히 보급하고 있는데, MTB 타시는 아저씨가 오더니 제 자전거옆에 자전거를 걸려고 하십니다...",
"date": "2015.06.29"
},
{
"url": "http://www.clien.net/cs2/bbs/board.php?bo_table=cm_bike&wr_id=744463",
"category": "[자전거당]",
"title": "전용전기자전거랑 전기자전거킷이랑 어떤게 더 좋은가요?",
"reply_count": "2",
"content": "이번에 자전거바꾸기로 하면서 전기자전거로 갈려고 하는데 전용전기자전거가 좋을지 아니면 일반자전거에 전기자전거킷을 다는게 더 좋은지 ...",
"date": "2016.06.26"
},
{
"url": "http://www.clien.net/cs2/bbs/board.php?bo_table=cm_bike&wr_id=500797",
"category": "[자전거당]",
"title": "에이모션 자전거에 대해서 질문좀요(그리고 30만원대 로드자전거추천좀요)",
"reply_count": "7",
"content": "에이모션 브랜드 자전거를 살려고 하는데요 저는 에이모션 브랜드를 처음 들어서요 괜찮은 자전거브랜드인가요? 그리고 로드 자전거 30~35만원선 로드자전거좀 추천좀 해주세요",
"date": "2015.03.20"
},
{
"url": "http://www.clien.net/cs2/bbs/board.php?bo_table=kin&wr_id=3069520",
"category": "[아무거나질문]",
"title": "자이언트 자전거중에 보라색 자전거가 있나요?",
"reply_count": "1",
"content": "아저씨가 보라색 자이언트 자전거를 타고 가는걸 봤는데... 로드 바이크라는 것은 단번에 알았지만 모델명은 몰랐습니다-_-; 자이언트 자전거중에 보라색 자전거는 어떤 모델이 있을까요...",
"date": "2014.03.10"
},
{
"url": "http://www.clien.net/cs2/bbs/board.php?bo_table=cm_bike&wr_id=587835",
"category": "[자전거당]",
"title": "자전거도로의 안 흔한 자전거(2)",
"reply_count": "6",
"content": "라피에르 자전거잘 안보이긴 하더라구요... 윗 자전거는 동일한 모델을 자전거도로에서 한번도 만나본적이 없고.. 아래 자전거는 지나가는건...",
"date": "2015.08.02"
},
{
"url": "http://www.clien.net/cs2/bbs/board.php?bo_table=cm_bike&wr_id=524259",
"category": "[자전거당]",
"title": "두발자전거는 제가 못 타지만 이 자전거는 탈 수 있을 거 같아요.",
"reply_count": "10",
"content": " http://halfbikes.com/in/ 몇번 자전거를 샀다가 팔다가 하는 시행착오를 겪다가 이런 자전거를 찾았는데요, 이런 자전거라면 저도 탈 수 있을 거 같아요. ...",
"date": "2015.05.27"
},
{
"url": "http://www.clien.net/cs2/bbs/board.php?bo_table=cm_bike&wr_id=316990",
"category": "[자전거당]",
"title": "자전거관련 정보 및 자전거여행 커뮤니티 사이트 추천 부탁드려요.",
"reply_count": "5",
"content": "자전거가 처음이라 자전거에 대해 여러가지로 배워야 할 것 같은데 좋은 곳 있으면 소개 부탁드려요. 자전거타는 법이나 수리방법 같은 것들요... 그리고 국내...",
"date": "2013.07.10"
},
{
"url": "http://www.clien.net/cs2/bbs/board.php?bo_table=cm_bike&wr_id=644398",
"category": "[자전거당]",
"title": "자전거도로에서 자전거우선인가요?",
"reply_count": "16",
"content": "인도와 자전거전용도로가 공존해있잖습니까? 다름이 아니라 걷다보면 자전거도로로 걸을수도 있지않나요? 자전거도로를 걷다가 자전거가 달려오길래...",
"date": "2015.10.07"
}
]
댓글
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- jpa
- JavaScript
- maven
- jsp
- 태그를 입력해 주세요.
- 알뜰폰
- Kendo UI Web Grid
- 로드 바이크
- spring
- graylog
- CentOS
- Spring Boot
- kotlin
- Kendo UI
- chrome
- 평속
- Tomcat
- 구동계
- Spring MVC 3
- jstl
- 자전거
- Docker
- bootstrap
- 로드바이크
- MySQL
- node.js
- Eclipse
- JHipster
- DynamoDB
- java
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
글 보관함