1<?php 2 $do = @$_GET['do']; 3 $title = @$_GET['title']; 4 $ns = @$_GET['ns']; 5 $back = @$_GET['back']; 6 $url = @$_GET['DOKU_URL']; 7 8 $wikidata="/home/www/wikidata/wiki/pages/"; 9 10 // @include('Snoopy.class.php'); 11 // echo $title; 12 13$log=true; 14if ($log) $logfile = fopen("logs.txt", "a") or die("Unable to open file!"); 15 16if ($log) fwrite($logfile, "\n제목: ". $title); 17 18 19 20 switch ($do) { 21 case "enha": 22 $result=fetch_enha($title); 23 $id=$ns.":".clearID($title); 24 25 if ($result!=null ) : 26 27 $file= $wikidata.str_replace(':','/',$id).'.txt'; 28 // echo $file; 29 // echo $id; 30 if (!file_exists($file)) file_put_contents($file, $result); 31 endif; 32 //echo $result; 33 34 break; 35 case "namu": 36 $result=fetch_namu($title); 37 $id=$ns.":".clearID($title); 38 // echo $result; 39 if ($result!=null ) : 40 41 $file= $wikidata.str_replace(':','/',$id).'.txt'; 42 // echo $file; echo $id; 43 if (!file_exists($file)) file_put_contents($file, $result); 44 endif; 45 // echo $result; 46 break; 47 case "root": 48 $id=$title; 49 break; 50 case "ns": 51 $id=($ns)?$ns.":".$title:$title; 52 break; 53} 54 55 56if ($log) fclose($logfile); 57 58if ($id){ 59 header("Location: ".$url."doku.php?id=$id&do=edit" ); exit(); 60} else { 61 header("Location: ".$url."doku.php?id=$back" ); exit(); 62} 63 64function clearID($id) { 65 $id=trim($id); 66 $id=str_replace(' ', '_',$id); 67 $id=str_replace('/', '_',$id); 68 $id=str_replace(':', '_',$id); 69 $id=str_replace('__', '_',$id); 70 return strtolower($id); 71} 72function fetch_namu($title){ 73 global $log; 74 global $logfile; 75 $title=str_replace(' ','%20',$title); 76 $title=str_replace('+','%20',$title); 77 78 //$uri="https://namu.wiki/raw/".rawurlencode($title); 79 80 if ($log) fwrite($logfile, "\npatch> ". $title); 81 $uri="https://namu.wiki/raw/".(myUrlEncode($title)); 82 // echo $uri; exit; 83 // $raw= file_get_contents($uri); 84 if ($log) fwrite($logfile, "\n". $uri); 85 86 $raw=get_content($uri); 87 88 //echo $raw; exit; 89 $result=e2d($raw); 90 91 if ( strlen ($result)<500) return false; 92 $title=str_replace('%20',' ',$title); 93 94 $result="{{tag>$title}}\n======$title======\n\n$title([[$uri|출처]])$result\n * 출처: 나무위키- $title([[https://creativecommons.org/licenses/by-nc-sa/2.0/kr/|CC BY-NC-SA 2.0 KR]])\n\n"; //페이지 제목 추가. 95 //echo $result; exit; 96 return $result; 97} 98 99 100function myUrlEncode($string) { 101 $entities = array('%21', '%2A', '%27', '%28', '%29', '%3B', '%3A', '%40', '%26', '%3D', '%24', '%2C', '%2F', '%3F', '%25', '%23', '%5B', '%5D'); 102 $replacements = array('!', '*', "'", "(", ")", ";", ":", "@", "&", "=", "$", ",", "/", "?", "%", "#", "[", "]"); 103 /* http://php.net/manual/kr/function.urlencode.php 104 105 $entities = array('%21', '%2A', '%27', '%28', '%29', '%3B', '%3A', '%40', '%26', '%3D', '%2B', '%24', '%2C', '%2F', '%3F', '%25', '%23', '%5B', '%5D'); 106 $replacements = array('!', '*', "'", "(", ")", ";", ":", "@", "&", "=", "+", "$", ",", "/", "?", "%", "#", "[", "]");*/ 107 108 return str_replace($entities, $replacements, urlencode($string)); 109} 110 111 112function get_content($url) { 113 $agent = 'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)'; 114 $curlsession = curl_init (); 115 curl_setopt ($curlsession, CURLOPT_URL, $url); 116 curl_setopt ($curlsession, CURLOPT_HEADER, 0); 117 curl_setopt ($curlsession, CURLOPT_RETURNTRANSFER, 1); 118 curl_setopt ($curlsession, CURLOPT_POST, 0); 119 curl_setopt ($curlsession, CURLOPT_USERAGENT, $agent); 120 curl_setopt ($curlsession, CURLOPT_REFERER, ""); 121 curl_setopt ($curlsession, CURLOPT_TIMEOUT, 3); 122 $buffer = curl_exec ($curlsession); 123 $cinfo = curl_getinfo($curlsession); 124 curl_close($curlsession); 125 if ($cinfo['http_code'] != 200) 126 { 127 return ""; 128 } 129 return $buffer; 130} 131 132function fetch_enha($title){ 133 134 $uri="https://raw.enha.kr/wiki/".str_replace('+', '%20',urlencode($title)); //공백을 %20으로 바꿈. 135 //$uri="https://raw.enha.kr/wiki/".(str_replace(' ', '%20',$title)); //공백을 %20으로 바꿈. 136 //echo $uri; 137 # $uri="http://rigvedawiki.net/r1/wiki.php/".str_replace(' ', '%20',$title)."?action=raw"; //공백을 %20으로 바꿈. 138 //$title=str_replace('%20','_',$title); 139# $snoopy = new Snoopy; 140# $snoopy->fetch($uri); 141# global $raw; 142# $raw=$snoopy->results; 143 144 $raw= @file_get_contents($uri); 145 146 $result=e2d($raw); 147 if ( strlen ($result)<500) return "냉무"; 148 149 $result="{{page>:틀#펌글}}\n\n======$title======\n\n".$result."\n * 출처: 엔하위키미러- ".$title."(CC BY-NC-SA 2.0)\n\n{{tag>엔하위키미러 $title}}\n"; //페이지 제목 추가. 150 return $result; 151} 152 153function e2d($raw) { 154 155 /* 156 패턴에서 \b는 단어를 지시합니다. 단어 "web"만 매치하고, 157 "webbing"이나 "cobweb" 등의 부분적인 경우에는 매치하지 않습니다. 158 패턴 구분자 뒤의 "i"는 대소문자를 구별하지 않게 합니다. 159 The i is to ignore letter cases (this is commonly known - I think) 160The s tells the code NOT TO stop searching when it encounters \n (line break) - this is important with multi-line entries for example text from an editor that needs search. 161The m tells the code it is a multi-line entry, but importantly allows the use of ^ and $ to work when showing start and end. 162http://php.net/manual/en/reference.pcre.pattern.modifiers.php 163 */ 164 //단순 삭제 165 $todel=array("[[각주]]","[[목차]]","[목차]","<:>","<(>","<)>","\r","#blue","#orange","#red","#green"); 166 $text=str_ireplace($todel,"",$raw); // 필요없는 것 삭제... 167 168 //단순 치환 169 $torep=array( 170 "||"=>"|", //테이블처리 171 "[[추가바람]]" => "[[:추가바람]]", 172 "{{{" => "%%", 173 "}}}" => "%%", 174 "[[include(틀:스포일러)]]" => "{{page>:틀#누설}}", 175 "[[include(틀:비하적 내용)]]" => "{{page>:틀#속된 표현}}", 176 "[[include(틀:폭력요소)]]" => "{{page>:틀#폭력성}}", 177 "[[include(틀:성적요소)]]" => "{{page>:틀#선정성}}", 178 "[[include(틀:편중된 관)]]" => "{{page>:틀#편중된 관점}}", 179 180 "[[BR]]" => " \\ ", 181 "[/" => "[", 182 "[\"/" => "[\"", 183 "%20" => " ", 184 "attachment:/" => "https://attachment.namu.wiki/", 185 "attachment:" => "http://z4.enha.kr/http://rigvedawiki.net/r1/pds" 186 ); 187 foreach ($torep as $key => $val) 188 { 189 $text=str_ireplace($key,$val,$text); 190 } 191 192 $torep=array( 193 194 "/\n \* /"=>"\n * ", // 불릿 처리 195 "/\n \* /"=>"\n * ", // 불릿 처리 196 197 "/\n\* /"=>"\n * " // 불릿 처리 198 ); 199 foreach ($torep as $key => $val) 200 { 201 $text=preg_replace($key,$val,$text); 202 } 203 204 205 206 $text= preg_replace('/^=====([^=]+)=====/m','뷀뷀$1뷀뷀',$text); //제목처리 h5 207 $text= preg_replace('/^====([^=]+)====/m','뷀뷀뷀$1뷀뷀뷀',$text); //제목처리 h4 208 $text= preg_replace('/^===([^=]+)===/m','뷀뷀뷀뷀$1뷀뷀뷀뷀',$text); //제목처리 h3 209 $text= preg_replace('/^==([^=]+)==/m','뷀뷀뷀뷀뷀$1뷀뷀뷀뷀뷀',$text); //제목처리 h2 210 $text= preg_replace('/^=([^=]+)=/m','뷀뷀뷀뷀뷀뷀$1뷀뷀뷀뷀뷀뷀',$text); //제목처리 h1 211 212 $text= preg_replace('/뷀/','=',$text); //제목처리 213 214 215 216 $text=preg_replace('/(\n=+.+) /','$1',$text); //제목뒤의 공백제거 217 $text=preg_replace('/(\n=+) /','$1',$text); //제목엎의 공백제거 218 219 for ($i=0;$i<3;$i++) { //우와 지랄맞음.. 이방법밖에 없나? 220 $text=preg_replace('/==(.*)\*\*(.*)\*\*(.*)==/','==$1$2$3==',$text); //제목의 **제거 221 $text=preg_replace('/^==(.*)\[\[(.*)==/m','==$1$2==',$text); //제목의 [[ ]]제거 222 $text=preg_replace('/^==(.*)\]\](.*)==$/m','==$1$2==',$text); //제목의 [[ ]]제거 223 } 224 225 $text=preg_replace('/\n\n( )+([^* ])/',"\n * $2",$text); // 들여쓰기 변환... 226 $text=preg_replace('/\n( )+([^* ])/',' - $2',$text); // 들여쓰기 변환... 227 228 $text= preg_replace("/\n\s\* /im","\n * ",$text); //그림 처리2 229 230 $text= preg_replace('/https?:.+(jpg|gif|bmp|png|jpeg)/i','{{$0}}',$text); //그림 처리2 231 $text= preg_replace('/\??width=[0-9]*/i','',$text); // width 처리 232 $text= preg_replace('/\??height=[0-9]*/i','',$text); // height 처리 233 $text= preg_replace('/&{0,1}align=right|left|middle/i','',$text); // align 처리 234 235 //구문강조 처리 236 //$text= preg_replace('/\'\'\'([^\'{3}]+)\'\'\'/','**$1**',$text); //굵게''' 처리 237 $text= preg_replace("/'''/",'궭',$text); //굵게''' 처리 238 $text= preg_replace("/궭([^궭]*)궭/",'**$1**',$text); //굵게''' 처리 239 $text= preg_replace('/\'\'([^\'\']+)\'\'/','**$1**',$text); //기울이기'' 처리 240 $text= preg_replace('/~~([^~~]+)~~/','<del>$1</del>',$text); // 취소선 처리 241 $text= preg_replace('/--([^--]+)--/','<del>$1</del>',$text); // 취소선 처리 242 //$text=preg_replace("~.+a","ㅁ",$text); 243 //$text=preg_replace("(\=+)","$0=",$text); 244 //$text=preg_replace("(\=+)","$0=",$text); //제목줄처리. 245 246 //링크처리 247 //도쿠위키는 링크[[]]안의 ""를 무시하기 때문에 건드릴 필요가 없다. 248 $text= preg_replace('/(\[[^\[|^\*][^\]]+\])([^\]])/','[$1]$2',$text); // 홀대괄호 링크처리 249 250 $text= preg_replace('/\[wiki\:/i','[',$text); // [wiki: 는 [로 251 252 253 //$text= preg_replace('/ \["([^\[]+)\]/','[["$1]]',$text); // [" "]를 [[ ]] 254 $text= preg_replace('/\[\[(https?:[^ "\[]+) ([^\[]+)\]\]/','[[$1|$2]]',$text); // [[xx yy]] 255 $text= preg_replace('/\[\["(.+)"(.+)\]\]/','[[$1|$2]]',$text); // [["ㅌㅌㅌ" ㅊㅊㅊ ]] 256 257 $text= preg_replace('/<[^>]+>/','',$text); // 각종 태그 처리. 258 259 $text= preg_replace('/\{\{\|([^\|\}\}]+)\|\}\}/','<box 80% round blue>$1</box>',$text); // 상자 260 261 // 지랄맞은 주석처리 262 $text= preg_replace('/\[\[/','뷀뷀',$text); 263 $text= preg_replace('/\]\]/','뷈뷈',$text); 264 $text= preg_replace('/\[\*([^\]]*)\]/','(($1))',$text); // 마침내 주석처리.. 265 $text= preg_replace('/뷀뷀/','[[',$text); 266 $text= preg_replace('/뷈뷈/',']]',$text); 267 268 //youtbe 269 270 $text= preg_replace('/\[\[.*youtube[^=]+=(.+)\|([^]]*)\]\]/','{{youtube>$1?640x390}}',$text); 271 272 //if ( strlen ($text)<500) $text=null; 273 return $text; 274} 275 276 277?>