Creative Commons License를 보유하지 않은 RSS Feed Items를 공개 취소하려면

***** 주의 : 이 Tip은 드루팔의 DB를 직접 다루는 것으로, SQL 조작 실수로 큰 낭패를 볼 수 있으므로 극히 주의해서 사용하기 바란다 *****

협력 관계에 있는 블로그가 아닌 곳이면서(아래에 보이는 숫자들이 그 번호임)
Creative Commons License를 보유하지 않은 RSS Feed Items를 공개 취소하려면,
우선 대상 컨텐츠를 찾아야 한다.

대상을 확인하려면 -------------

select node.nid, feed.nid, node.type, rev.title
from node
inner join node_revisions as rev
on node.nid=rev.nid and node.status=0
and node.type='feed_items'
and rev.body NOT like '%creativecommons.org%'
inner join feedapi_node_item as feed
on feed.nid=node.nid
and feed.feed_nid NOT IN ( 62, 377, 430, 870, 1143, 1439, 3161, 3162 )
order by node.nid desc

비공개로 전환하려면 ------------

UPDATE {node} SET status = 0 WHERE nid IN (
select node.nid
from node
inner join node_revisions as rev
on node.nid=rev.nid
and node.type='feed_items'
and rev.body NOT like '%creativecommons.org%'
inner join feedapi_node_item as feed
on feed.nid=node.nid
and feed.feed_nid NOT IN ( 62, 377, 430, 870, 1143, 1439, 3161, 3162 )
order by node.nid
)

이를 실행하면 된다.
혹시 MySQL의 버전 문제로 위 업데이트가 실행이 안되면 아래의 변형 SQL로 실행할 것.

UPDATE node
inner join node_revisions as rev
on node.nid=rev.nid
and node.type='feed_items'
and rev.body NOT like '%creativecommons.org%'
inner join feedapi_node_item as feed
on feed.nid=node.nid
and feed.feed_nid NOT IN ( 62, 377, 430, 870, 1143, 1439, 3161, 3162 )
SET status = 0

만일 실수해서 잘못 처리됐다고 판단되면
복구를 위해 status를 1로 바꾸면 된다.

Your rating: None 평균 : 3.5 (2 votes)

댓글

만일 FeedAPI가 아닌

만일 FeedAPI가 아닌 aggregator로 수집한 RSS 피이드 중에서
크리에이티브 커먼즈 라이센스가 아닌 항목을 골라내고 지우려면,

(확인)
select * from aggregator_item as aggr
where aggr.description NOT like '%creativecommons.org%'
order by aggr.timestamp

(삭제 처리)
delete from aggregator_item where
description NOT like '%creativecommons.org%'

이상입니다.

개선된 SQL입니다.

개선된 SQL입니다. 해당 RSS의 출처 이름도 표시해 줍니다.

select node.nid, node.status, rev.title, aggr.title, node.type
from node
inner join node_revisions as rev
on node.nid=rev.nid
and node.type='feed_items'
and rev.body NOT like '%creativecommons.org%'
inner join feedapi_node_item as feed
on feed.nid=node.nid
and feed.feed_nid NOT IN ( 62, 377, 430, 870, 1143, 1439, 3161, 3162 )
inner join ( select agg.nid, agg.type, agg.title
from node as agg where agg.type='feedapi_aggregator' ) as aggr
on feed.feed_nid=aggr.nid
order by node.nid desc

2009년 1월 이후,

2009년 1월 이후, 새로운 버전의 feedapi 모듈에서는
관련 DB 테이블의 스키마가 다소 바뀌어 아래와 같이 확인해야 한다.

select node.nid, node.status, rev.title, aggr.title, feed.feed_nid, node.type
from node
inner join node_revisions as rev
on node.nid=rev.nid
and node.type='feed_items'
and rev.body NOT like '%creativecommons.org%'
inner join feedapi_node_item_feed as feed
on feed.feed_item_nid=node.nid
and feed.feed_nid NOT IN ( 62, 377, 409, 430, 870, 908, 1143, 1428, 1439, 1563, 1894, 3161, 3162, 5874 )
inner join ( select agg.nid, agg.type, agg.title
from node as agg where agg.type='feedapi_aggregator' ) as aggr
on feed.feed_nid=aggr.nid
order by node.nid desc

-----------------------------

해당 노드를 비공개로 전환하려면, 아래와 같은 SQL을 실행하면 된다.

UPDATE node
inner join node_revisions as rev
on node.nid=rev.nid
and node.type='feed_items'
and rev.body NOT like '%creativecommons.org%'
inner join feedapi_node_item_feed as feed
on feed.feed_item_nid=node.nid
and feed.feed_nid NOT IN ( 62, 377, 409, 430, 870, 908, 1143, 1428, 1439, 1563, 1894, 3161, 3162, 5874 )
SET status = 0