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
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
)
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
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로 바꾸면 된다.


댓글
3 comments posted만일 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입니다. 해당 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월 이후, 새로운 버전의 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