Synology DLM 개발(제작)방법

Synology(Nas) 2019.03.18 00:38

Synology 검색 엔진 추가

시놀로지에서는 토렌트 검색할때 '검색 엔진'이란걸 추가할 수 있는데 간단하게 말하면 다른 토렌트 사이트를 추가하는 겁니다.

그러면 검색됐을때 더 많은 토렌트들이 검색됩니다.

검색 엔진 개발,디버깅 방법을 몰라서 한참을 헤맸네요.(문서 있긴한데 영알못이라 뭐라는지 모르겠음)

해당 게시글은 isul님 깃허브 저장소에 나와있는 코드를 토대로 썼습니다.

참고로 저는 백엔드를 잘 모릅니다.

개발에 앞서서



준비

개발 가이드 문서:https://global.download.synology.com/download/Document/DeveloperGuide/DLM_Guide.pdf

bash - dlm파일을 조금이라도 편하게 만들기 위해 (만들다 보면 귀찮아짐.)

OpenSSH - 서버 접근(디버깅 할때)

검색엔진 개발할때 쓰일 에디터 (필자는 Visual studio code를 사용)

시놀로지에서 SSH 접속 가능하게 해야함.


DLM 모듈

DLM는 최소 INFO 파일과 search.php 파일(다른 이름으로 된 .php도 가능함.)로 구성되어 있습니다.

해당 파일들을 .tar.gz으로 압축해서 확장자만 .dlm으로 변경해주면 됩니다. (폴더를 압축하는게 아님)

INFO 파일에는 검색엔진 정보가 들어가고 search.php에는 토렌트 파일 검색에 필요한 코드로 짜여있습니다.


INFO 파일 정보

1
2
3
4
5
6
7
8
9
10
11
{
"name": "torrentsoda",
"displayname": "Torrent soda",
"description": "Torrent soda - isul@isulnara.com",
"version": "1.1",
"site": "https://torrentsoda.com/",
"module": "search.php",
"type": "search",
"class": "SynoDLMSearchTorrentSoda"
}
 

해당 파일의 구조는 이게 다인데 그냥 검색엔진 정보밖에 안들어있습니다.

name - 검색엔진 이름

displayname - 시놀로지에서 보여질 검색엔진 이름

description - 시놀로지에서 보여질 검색엔진 설명

version - 시놀로지에서 보여질 검색엔진 버전

site - 검색엔진 사이트 URL

module - 아까 말한 "토렌트 파일 검색에 필요한 코드로 짜여진 파일" 이름

type - 모듈 타입인데 문서에는 search밖에 없다고 함

class - module의 클래스 명

빨간색으로 된거만 신경쓰시면 됩니다.


search.php 파일 정보

search.php에는 module에 쓴 class를 가져야 하고 그 클래스는 prepare메서드와 parse메서드가 반드시 정의되어 있어야 합니다.

파라미터도 동일하게 써야합니다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<?
class SynoDLMSearchTorrentSoda
{
    public function __construct()
    {
    }
 
 
    public function prepare($curl$query)
    {
    }
 
    
    public function parse($plugin$response)
    {
    }
    
}
?>

prepare메서드 키워드 검색할때 한번만 호출됩니다.

이 메서드의 역할은 해당 토렌트 사이트 웹파싱해서 parse로 넘겨주는 역할을 하는듯 합니다.(추측)

그래서 그냥 한번짜두면 그거 복사해서 쓰면 됩니다.

query변수에는 키워드 검색할때 쓴 키워드가 담겨있습니다.


parse메서드 키워드로 검색된 결과를 디스플레이 하기 위해서 정규식으로 추출해 $plugin의 메서드인 addResult(->연산자쓰는데 맞겠죠?)를 호출할때 넘겨줍니다.

plugin 변수에 담긴 클래스의 메서드는 총 3개(addRSSResults,addJsonResults,addResult)입니다.

Json이냐 RSS이냐 아님 직접 추출한거냐에 따라 다르게 호출하네요.

반환값은 추출한 갯수고요.


AddResult의 메서드는 9개의 파라미터를 요구하고 있습니다.

title,download,size,datetime,page,hash,seeds,leechs,category인데 예시로 값을 들어보자면

1
2
3
4
5
6
7
8
9
$title = "[국내영화] 적"
$download = "magnet:?xt=urn:btih:ebd0"
$size = "2230635724"
$datetime = "2019-03-18 00:14:12"
$page = "https://tore.com/"
$hash = "ab8041aae3fe71e2737ca41f1df7c0d7"
$seeds = 0
$leechs = 0
$category = "국내영화"

대충 이런 느낌 입니다.

해당 저장소에서는 title,download,size,page,category만 웹사이트에서 가져오네요.

디버깅 방법


뭐 plugin에 담긴 클래스 메서드 호출만 빼서 본인 웹서버에 디버깅으로도 얼추 가능하겠습니다만..

전 삭제해버려서 없습니다.

해당 저장소의 소스코드에서는 디버깅용도로 아예 함수를 따로 만들어서 사용하더군요.

1
2
3
4
5
6
7
<?
private function debug($log)
    {
        if ($this->debugEnabled==true)
            file_put_contents('/tmp/torrentsoda.log'$log . "\r\n\r\n", FILE_APPEND);
    }
?>

ssh로 서버 접속후에 첫 경로가 File station의 개인 폴더 일겁니다.

cd 명령어로 루트까지 접속하고 tmp폴더에 들어가 지지고 볶고 하면 됩니다.

당연한 이야기지만 file_put_contents 함수 호출시 저장 경로를 바꿔준다면 그거에 맞춰서 들어가야 합니다.

로그파일이 쌓인다면 다운로드 후 삭제 무한반복 했습니다.

그리고 파일 다운로드 할때 반드시 cmd창 하나 더 켜서 하세요..

scp 명령어 쓰면 됩니다.

1
2
scp -P SSH포트 계정명@웹사이트주소:파일경로 저장경로
scp -P 22 admin@test.com:/tmp/torrentsoda.log ./Desktop/

그리고 파일 삭제할때는 관리자권한 얻고 삭제 해야 합니다.(안그럼 권한 없다고 안됨)

1
2
sudo su -
rm torrentsoda.log


개발 방법


앞에 설명한것만 보고 php를 할줄 알면 끝입니다만

해당 저장소의 소스코드로 대충 어떻게 돌아가시는지 예제겸 돌려보세요.

그냥 빌드해서 dlm추가하고 해당 검색 엔진만 체크해서 키워드 검색해보면 됩니다.

참고로 해당 저장소의 torrentsoda는 모듈의 URL 변수 값을 수정해줘야 합니다.

(2019-03-18 현재 저장소 fork하고 수정해서 pull request 날렸는데 받아주실지는 모르겠네요.)

댓글을 달아 주세요