그누커뮨 GNUboard COMmUNities
트위터아이디로 로그인하기트위터ID로 로그인
내 커뮤니티는 내가 수정할 수 있기 때문에 의미있다!
그누보드를 다루기 위해 알아야할 알짜배기 정보들을 적어봅니다.
 
작성일 : 09-12-21 21:50

php 파일로 그누보드 글쓰기

 글쓴이 : 말러83
조회 : 36,824  

키워드 : m3post, 함수, 그누보드, 글쓰기, 외부파일, php

오토스크랩 : 일괄 스크랩 오토스크랩 설정 네이버 블로그로 스크랩 다음 블로그로 스크랩 이글루스로 스크랩 티스토리로 스크랩 텍스트큐브로 스크랩 트위터로 보내기
   m3post100.utf8.php (4.2K) [169] DATE : 2009-12-21 22:06:33
   m3post100.euckr.php (4.0K) [67] DATE : 2009-12-21 22:06:33
사람이 직접 글을 작성하고 "글쓰기" 버튼을 누르지 않고, 프로그램으로 글을 올려야 하는 경우가 있습니다. 그런 경우에 사용할 수 있는 함수를 하나 만들어봤습니다.
<?
// m3post 함수 ver 1.00 by 말러83 (2009-12-21)
// $newpost[bo_table], $newpost[wr_subject], $newpost[wr_content], $newpost[mb_id] 값만 지정하고,
// m3post($newpost); 라고 실행시키면 글이 해당 게시판에 올라갑니다.

function m3post($newpost) {
    global $g4;

    // 입력할 bo_table이 진짜 게시판인지 확인
    if(!strlen($newpost[bo_table])) return "error: bo_table 값이 지정되지 않았습니다.";
    if(!$bo = sql_fetch("select * from `$g4[board_table]` where bo_table='$newpost[bo_table]'")) {
        return "error: bo_table이 존재하지 않습니다.";
    }

    // 카테고리 사용한다면 카테고리 설정
    $ca_name = $newpost[ca_name];
    if($bo[bo_use_category]) {
        if(!$ca_name || strpos($bo[bo_category_list], $ca_name)===false) { // 카테고리 지정 안됐거나 없는 걸 지정했다면 첫번째로 설정
            $temp = @explode("|", $bo[bo_category_list]);
            $ca_name = $temp[0];
        }
    } else {
        $ca_name = ""; // 카테고리 쓰지 않으면 공백값으로 지정
    }

    // 회원정보 및 권한 확인
    $mb = get_member($newpost[mb_id]);
    if(!$mb) return "error: mb_id가 존재하지 않습니다.";
    if($bo[bo_write_level] > $mb[mb_level]) {
        return "error: 글쓰기 권한이 없습니다.";
    }

    // 변수 정리
    $bo_table = $newpost[bo_table];
    $write_table = $g4[write_prefix] . $bo_table;
    $wr_num = get_next_num($write_table);
    $ca_name = addslashes($ca_name);
    $html = "html1"; // 이 값은 필요에 맞게 설정
    $secret = "";
    $mail = "";
    $wr_subject = addslashes(trim($newpost[wr_subject]));
    $wr_content = addslashes(trim($newpost[wr_content]));
    if(!$wr_subject) return "error: 글 제목이 없습니다.";
    if(!$wr_content) return "error: 글 내용이 없습니다.";
    $mb_id = $mb[mb_id];
    $wr_password = $mb[mb_password];
    $wr_name = $bo[bo_use_name] ? $mb[mb_name] : $mb[mb_nick];
    for($i=1; $i<=10; $i++) { // 확장필드도 입력
        $wr = "wr_{$i}";
        ${$wr} = addslashes($newpost[$wr]);
    }
    $wr_link1 = $newpost[wr_link1];
    $wr_link2 = $newpost[wr_link2];
    $wr_trackback = $newpost[wr_trackback];
   
    // 글 입력하기
    $sql = " insert into $write_table
                set wr_num = '$wr_num',
                    wr_reply = '',
                    wr_comment = 0,
                    ca_name = '$ca_name',
                    wr_option = '$html,$secret,$mail',
                    wr_subject = '$wr_subject',
                    wr_content = '$wr_content',
                    wr_link1 = '$wr_link1',
                    wr_link2 = '$wr_link2',
                    wr_link1_hit = 0,
                    wr_link2_hit = 0,
                    wr_trackback = '$wr_trackback',
                    wr_hit = 0,
                    wr_good = 0,
                    wr_nogood = 0,
                    mb_id = '$mb_id',
                    wr_password = '$wr_password',
                    wr_name = '$wr_name',
                    wr_email = '$wr_email',
                    wr_homepage = '$wr_homepage',
                    wr_datetime = '$g4[time_ymdhis]',
                    wr_last = '$g4[time_ymdhis]',
                    wr_ip = '$_SERVER[REMOTE_ADDR]',
                    wr_1 = '$wr_1',
                    wr_2 = '$wr_2',
                    wr_3 = '$wr_3',
                    wr_4 = '$wr_4',
                    wr_5 = '$wr_5',
                    wr_6 = '$wr_6',
                    wr_7 = '$wr_7',
                    wr_8 = '$wr_8',
                    wr_9 = '$wr_9',
                    wr_10 = '$wr_10' ";
    sql_query($sql);
    $wr_id = mysql_insert_id();

    // 부모 아이디에 UPDATE
    sql_query(" update $write_table set wr_parent = '$wr_id' where wr_id = '$wr_id' ");

    // 최신글 삽입
    sql_query(" insert into $g4[board_new_table] ( bo_table, wr_id, wr_parent, bn_datetime, mb_id ) values ( '$bo_table', '$wr_id', '$wr_id', '$g4[time_ymdhis]', '$mb[mb_id]' ) ");

    // 게시글 1 증가
    sql_query("update $g4[board_table] set bo_count_write = bo_count_write + 1 where bo_table = '$bo_table'");

    // 포인트 발생
    insert_point($member[mb_id], $board[bo_write_point], "$bo[bo_subject] $wr_id 글쓰기", $bo_table, $wr_id, '쓰기');

    // 성공하면 글번호를 return;
    return $wr_id;
}
?>
그누보드용 xmlrpc metaWeblog.newPost method도 위와 비슷한 방식으로 함수를 만들어놓고 있습니다.

첨부파일을 /extend/ 폴더에 넣어두고, 다음과 같이 페이지를 만들어 실행하면 글이 자동으로 등록되는 것을 확인할수 있습니다.
예제:
<?
include_once("./_common.php");
$newpost[bo_table] = "freeboard";
$newpost[wr_subject] = "자동등록글";
$newpost[wr_content] = "이 글은 자동으로 등록되었습니다.<br>정말 신기합니다.";
$newpost[mb_id] = "admin";
$result = m3post($newpost);
if(strstr($result, "error")) echo $result;
else echo "<a href='$g4[bbs_path]/board.php?bo_table=$newpost[bo_table]&wr_id=$result'>결과보기</a>";
?>

게시물의 저작권은 별도 표시가 없는 한 작성자에게 있습니다.
게시물 주소 : http://gnucomun.net/sp/study.52
7.7 (14명)
평가해주세요. 비회원 가능!
말자 10-01-20 02:49
 
와 정말 좋네요~!! 감사합니다~~
셀렉트로 특정 게시판 설정하고, 폼에 입력하고서 저장시킨후 다시 리턴되서 반복하게 된다면 캬 장난아니겠네요...
완전 초짜지만 - -도전!!ㅎㅎ!!^^ 좋은 정보 감사합니다.
     
말러83 10-01-20 16:29
 
http://autoscrap.net 같은 경우 이 함수를 사용하고 있죠.
예약글 같은 기능이나 클릭하면 자동으로 글이 써지는 기능 등 활용 방안이 무궁무진합니다.^^
세분 10-08-26 15:45
 
http://autoscrap.net 처럼 자동으로 업로드 할수있는 방법좀 알려주세요
http://wawa.sosiz.com/shop/bbs/board.php?bo_table=0301
실행하니  자동등록글 이런게 되서요 방법좀 알려주세요
설명하기 그런면 쪽지라도 좀 알려주세요 부탁합니다
     
말러83 10-08-26 17:09
 
네이버의 실시간검색어 api에서 검색어를 생성해서
http://dev.naver.com/openapi/apis/contents/rank

검색 api에서 검색 결과를 받아와 넣어주고 있습니다.
http://dev.naver.com/openapi/apis/search/blog

api로 받아온 내용을 잘 조합해서 본문 내용을 만들어 주면 됩니다. (뭘 더 어떻게 설명해야 할지;;)

자동 수집에 관한 내용은 다음 글의 댓글을 참고해보시고요.
http://gnucomun.net/sp/idea.77

쪽지나 댓글로 설명하기에는 너무 방대한 내용인 것 같고요..
취미 생활로 몇년 정도 php 공부와 api 공부를 하면 자연스럽게 할 수 있게 되는 내용입니다. ^^;;
dipper 10-12-22 18:05
 
좋은기능 감사합니다.
그런데 외부페이지에서 글을 올리게 할려면 힘들까요?
     
말러83 10-12-22 23:51
 
외부페이지가 뭘 말하는 건가요? 외부 서버에 있는 페이지?
저 함수를 이용하면 원하는 건 웬만하면 다 할 수 있을 거에요
          
dipper 10-12-29 01:52
 
저건 같은 사이트내에서 호출해서 사용을 하는것인데
다른사이트에서 목적지 사이트로 예제처럼 올릴려면 어떻게 하면 되냐는거죠 ㅎㅎ
무식해서 질문을 제대로 드린건지 ㅠㅠ
morning 11-09-30 13:31
 
말러님!!

말러님의 소스를 이용해서 한 게시판에 글을 올리면 다른특정 게시판에도 글이 올라가게 하려고 하고 있습니다.

1
이 소스를 m3post100.lib.php 로 한 후 그누보드/리브/에 넣었습니다.

2
그리고 스킨의 write.tail.skin.php 에
---------------
<?
if (!defined("_GNUBOARD_")) exit; // 개별 페이지 접근 불가

include_once("$g4[path]/lib/m3post100.lib.php");

$newpost[bo_table] = "diary_list";
$newpost[wr_subject] = "자동등록글 호호호호";
$newpost[wr_content] = "이 글은 자동으로 등록되었습니다.<br>정말 신기합니다.";
$newpost[mb_id] = "admin";
$result = m3post($newpost);
?>
---------------
했습니다.



그래도 diary_list 게시판에서는 아무런 변화가 없습니다.

저의 사용법에 문제가 있나요?


좋은 가르침을 부탁드립니다.
     
말러83 11-09-30 17:30
 
$result에 반환된 값이 뭔지 한 번 확인해보세요
          
morning 11-09-30 17:54
 
죄송합니다.

어떻게 확인하죠?
          
말러83 11-09-30 20:55
 
저 구문 아래에 print_r2($result); 이렇게 하면 $result 값에 있는 값이 출력됩니다
               
morning 11-09-30 22:34
 
님의 가르침대로 해도 아무런 값도 보이지 않고,
글이 자동으로 올라가지도 않습니다.

저의 경우에는 write.tail.skin.php 를 읽지 못하는것이 아닌가도 생각듭니다.
테일에 넣지 않고 일반문서로 만들어 불러오면 잘됩니다.
               
말러83 11-10-01 01:35
 
원하는 상황에 저 코드가 실행되도록 하셔야 할 것 같네요. 테일 말고 적절한 위치를 찾으시면 해결될 문제라고 생각됩니다. 이 난관만 넘기면 원하는 코드를 가져다 쓰는 능력을 가지실 듯 ^^
현우씨 13-02-26 23:31
 
그누에서 글읽다 여기까지 왔는데 좋은거 배우고 갑니다. ㅎㅎ
자주 오도록 하겠습니다...
카카 13-07-02 05:54
 
죽이네요,,ㅎㅎ
김형기 15-07-20 10:45
 
코드를 사용해봣는대 한글은 안써지는데 어떻게 해야할까요?
 
 

Total 31
번호 제   목 글쓴이 평점 날짜 조회
31 자동 글쓰기 문의드립니다.. 조인성 10.00 10-08 3098
30 [질문] 음악파일 연속재쟁 (1) 회색지대 0.00 03-26 2944
29 말러캐쉬 적용후 공격관련 (3) 스누파이 10.00 11-21 2917
28 그누트윗 관련 문의드려요. (1) 서준파파 0.00 01-22 4940
27 alert 팝업창을.. 상단에 레이어로 나오게 하고싶은데.. 좀 가르쳐주세요. (1) 익명 10.00 10-17 5775
26 자꾸 질문을 해서 죄송하네요 ㅠㅠ (1) 무적홀맨 10.00 03-01 5567
25 오토스크랩 설치시 문제점.. (3) 무적홀맨 0.00 02-27 5543
24 그누트윗 ? 질문드려도 될까요 ? (3) 태마니 8.00 02-15 4560
23 head.sub.php 전역변수 숨기기 (javascript) (2) 유아원 8.67 01-23 8336
22 php 파일로 그누보드 글쓰기 (16) 말러83 7.71 12-21 36825
21 팝업창 한글 깨짐 해결하기 (1) 유아원 3.50 12-20 7635
20 메타태그 (keywords, description) 적용하기 (9) 유아원 9.50 12-11 6687
19 .htaccess로 외부 불펌 막기 (4) 말러83 9.00 12-06 6355
18 IE6에서 롤오버 이미지를 계속해서 재 읽는 버그 (2) 유아원 6.00 12-05 4177
17 검색결과 내용부분 태그 없애기 (1) 유아원 10.00 12-04 27285
 1  2  3  

Copyright ⓒ그누커뮨(http://gnucomun.net) All rights reserved.