개발
네이버에 열린이웃으로 RSS 등록하기 여정 (RSS 직접 만들기)
지난번에 내 사이트의 게시물을 공유하는 RSS피드 기능을 만들어 게시하는 작업을 진행했다.
나같은 커뮤니티나 플랫폼 사이트가 아닌 독자사이트는 글을 구독하기위해서 RSS 방식의 공유를 자주 사용하다보니 나름 필요하다고 생각했기 때문이다.
하지만 예전부터 이런 RSS가 제대로 보이는지, 사용되는지는 알기가 좀 힘들었고 관련한 이슈도 잘 파악하지 못하기도 하였다.
그러다 최근에 네이버에서 열린이웃으로 외부 사이트의 RSS를 등록한후 블로그 홈의 리스트에서 보여줄 수 있다는 걸 알게되었다.
그래서 나도한번 아래와 같이 내 사이트를 RSS 등록을 진행해보았다.
내 블로그 이웃관ㄹ에서 열린이웃(RSS) 추가를 하면
이렇게 이웃 새글에 내 사이트 글이 노출이된다다만 위에서 보다시피 정식 네이버블로그가 아니다보니 프로필 이미지도 제대로 안뜨고 무엇보다도 닉네임 부분이 이메일값이 보이는 문제가 발생했다.
아마 해당값은 아래 값을 파싱해서 보여주는듯했다.
<managingEditor>erusya@erulabo.com (에루라보)</managingEditor>Copy그렇다고 이 값을 이메일을 뺀 이름만 적자니 RSS 검증에서 에러가 뜬다.
왜냐하면
managingEditor 값은 이메일값이 필수이기 때문이다.단순히 보여주기위한 정보라지만 네이버 RSS 등록을 위해서 규칙을 깨트릴수는없는법, 뭔가 다른 방법이 분명있다고 생각해서 이리저리 뒤져보았다.
그리고 역시 최고의 답안은 정상작동하는 코드를 찾으면되는 것이었다.
나는 온라인에서 워드프레스나 티스토리블로그의 RSS 등록시에는 위 부분이 문제없지 작동한다는걸 깨달았고 해당사이트의 RSS 코드를 내껏과 비교해보니 저자 부분의 처리가 사뭇 다르다는걸 알 수 있었다.
managingEditor나 author 태그를쓰지않고 dc:creator 라는 태그를 쓴다는것을 찾은것이다.그래서 내 RSS 생성기 파트를 아래와 같이 업데이트 했다.
public function generateRss()
{
$xml = new \SimpleXMLElement('<?xml version="1.0" encoding="UTF-8"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/"></rss>');
$channel = $xml->addChild('channel');
$link = $channel->addChild('link', null, 'http://www.w3.org/2005/Atom');
$link->addAttribute('href', $this->channel['link'] . '/feed');
$link->addAttribute('rel', 'self');
$link->addAttribute('type', 'application/rss+xml');
$channel->addChild('title', htmlspecialchars($this->channel['title']));
$channel->addChild('link', htmlspecialchars($this->channel['link']));
$channel->addChild('description', htmlspecialchars($this->channel['description']));
$channel->addChild('language', $this->channel['language']);
$channel->addChild('generator', $this->channel['generator']);
$channel->addChild('ttl', $this->channel['ttl']);
//$channel->addChild('creator', htmlspecialchars($this->channel['author']['name']), 'http://purl.org/dc/elements/1.1/');
//$channel->addChild('managingEditor', $this->channel['managingEditor']);
if ($this->channel['pubDate']) {
$channel->addChild('pubDate', $this->channel['pubDate']);
}
$image = $channel->addChild('image');
$image->addChild('title', htmlspecialchars($this->channel['image']['title']));
$image->addChild('url', htmlspecialchars($this->channel['image']['url']));
$image->addChild('link', htmlspecialchars($this->channel['image']['link']));
foreach ($this->items as $item) {
$itemElement = $channel->addChild('item');
$itemElement->addChild('title', htmlspecialchars($item['title']));
$itemElement->addChild('link', htmlspecialchars($item['link']));
$itemElement->addChild('creator', htmlspecialchars($this->channel['author']['name']), 'http://purl.org/dc/elements/1.1/');
//$itemElement->addChild('author', htmlspecialchars($this->channel['author']['all']));
$itemElement->addChild('pubDate', $item['pubDate']);
$itemElement->addChild('category', htmlspecialchars($item['category']));
$itemElement->addChild('description', htmlspecialchars($item['description']));
$contentNode = $itemElement->addChild('encoded', null, 'http://purl.org/rss/1.0/modules/content/');
$domContent = dom_import_simplexml($contentNode);
$dom = $domContent->ownerDocument;
$thumbnailHtml = '<img src="' . $item['image'] . '" alt="thumbnail" />';
$bodyHtml = '<p>' . htmlspecialchars($item['description']) . '</p>';
$cdataHtml = $thumbnailHtml . $bodyHtml;
$domContent->appendChild($dom->createCDATASection($cdataHtml));
$itemElement->addChild('guid', htmlspecialchars($item['link']))->addAttribute('isPermaLink', 'true');
}
return $xml->asXML();
}Copy쉽게 정리하자면
dc:creator를 쓰기위해 rss 속성에 xmlns:dc="http://purl.org/dc/elements/1.1/" 를 추가하고 기존 managingEditor나 author 태그를 무효화하고 dc:creator 태그를 넣어주는 작업을 진행했다.그랬더니~

이렇게 이제 닉네임이 제대로 노출되기 시작한것이었다!
그리고 겸사겸사 이미지 파일도 섬네일로 노출될 수 있도록
content:encoded 태그를 이용하는 방식으로 이미지도 교체해보았다.아쉽게도 네이버쪽에서는 이미지까지는 지원을 안하는지 보이진 않았고 대신 다른 RSS 리더에선 아래와 같이 제대로 섬네일 이미지도 가져간다는 사실을 알게되었다.
크롬 브라우저 RSS 리더내 목표는 이런 뷰가 네이버에서도 나왔으면 하는 희망이 있긴한데, 네이버가 외부 RSS의 데이터를 어떤 기준으로 파싱해서 보여주는지에대한 문서자료도 없다보니 하나하나 때려맞추면서 해야했고 그런부분이 좀 답답한 마음이 들긴하다만 그래도 관심있게 해당 주제를 시간이 날때마다 이어서 연구해보고자 한다.
혹시모르지않나, 이리저리 시도해본게 또하나의 기록물로써 누군가한테 도움이될수도 있으니까 말이다.
피들리 RSS 리더
#문제해결 #php #SEO
0
개의 댓글