FeedAPI 로 생성된 Feed Items들 중 일부만을 재생성하고 싶은 경우

FeedAPI 로 생성된 Feed Items들 중 일부만을 재생성하고 싶은 경우

* 해결하고 싶은 현상

FeedAPI로 피이드 아이템들을 생성하는 것은 쉽다.
그리고 기존의 피이드 아이템들을 모두 지웠다가 새로 생성하는 것도 쉽다.
(Feed 컨텐츠의 Remove Items와 Refresh를 순서대로 이용하면 된다)

그런데 문제는, 기존의 피이드 아이템들 일부만을 지웠다가 새로 생성하고 싶은 경우에는 그 방법

이 모호하다.

- 통상적으로 이런 문제는 발생하지 않는다. Update Feed Items라는 기능이 있어서 저절로 교정이

되니까 말이다. 하지만 아주 특별한 경우에 이 Update를 못쓰는 경우가 있다. 예를 들어 피이드 아

이템이 생성되고 나서 후처리 재활용(복제 등)하는 경우에는 딱 한 번의 피이드 수집만으로 끝나,

Update 과정이 발생하면 곤란하게 된다.

일부 피이드 아이템을 삭제하고, Refresh를 누르면 피이드가 재생성되리라 예상했지만, 계속해서

There are no new items in the feed. 메시지만 보이고, 삭제했던 피이드 아이템들은 재생성되지 않

았다.

[조사]

feedapi.module 파일의 아래 함수를 유심히 살피자.

function _feedapi_invoke_refresh(&$feed, $param) {
  ... (중략) ...
  // Step 3: See, whether feed has been modified.
  if (!isset($feed->items) || $hash_old == $feed->hash) {
    // Updated the next_refresh_time field in any case.
    db_query("UPDATE {feedapi} SET next_refresh_time = %d, half_done = %d WHERE nid = %d", time() + $settings['refresh_time'], FALSE, $nid);
    if (!$cron) {
      if (is_object($feed) && $hash_old == $feed->hash) {
        drupal_set_message(t('There are no new items in the feed.'), 'status');
      }
      else {
        drupal_set_message(t('Could not refresh feed.'), 'error');
      }
    }
    return $counter;
  }
... (중략) ...
}

[해결책]

위에서 언급한 feedapi.module의

if (!$cron) {
  if (is_object($feed) && $hash_old == $feed->hash) {
   drupal_set_message(t('There are no new items in the feed
   ... ...

부분으로 판단컨데, $hash_old가 해결책의 열쇠로 보인다.
드루팔 DB에서

1. feedapi 테이블을 살펴보니, hash라는 필드가 보인다.
 피이드 아이템 일부만을 재생성하고 싶은 row를 선택,
 해당 row의 hash 필드값을 기존값과 다르게 변경한다.

2. 컨텐츠 관리자에서 재생성하고 싶은 피이드 아이템 일부만을 선택, 삭제한다.

3. 해당 Feed의 Refresh를 통해 피이드 아이템 일부만을 재생성 가능하다!

No votes yet