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?>