11# -*- coding: utf-8 -*-
2+ import re
3+ from hashlib import md5
24
3- from module .plugins .hoster .XFileSharingPro import XFileSharingPro , create_getInfo
5+ from module .plugins .hoster .XFileSharingPro import XFileSharingPro
6+ from module .network .RequestFactory import getURL
7+ from module .plugins .Plugin import chunks
8+ from module .common .json_layer import json_loads
9+
10+
11+ def getInfo (urls ):
12+ # DDLStorage API Documentation:
13+ # http://www.ddlstorage.com/cgi-bin/api_req.cgi?req_type=doc
14+ ids = dict ()
15+ for url in urls :
16+ m = re .search (DdlstorageCom .__pattern__ , url )
17+ ids [m .group ('ID' )] = url
18+
19+ for chunk in chunks (ids .keys (), 5 ):
20+ api = getURL ('http://www.ddlstorage.com/cgi-bin/api_req.cgi' ,
21+ post = {'req_type' : 'file_info_free' ,
22+ 'client_id' : 53472 ,
23+ 'file_code' : ',' .join (chunk ),
24+ 'sign' : md5 ('file_info_free%d%s%s' % (53472 , ',' .join (chunk ),
25+ '25JcpU2dPOKg8E2OEoRqMSRu068r0Cv3' )).hexdigest ()})
26+ api = api .replace ('<pre>' , '' ).replace ('</pre>' , '' )
27+ api = json_loads (api )
28+
29+ result = list ()
30+ for el in api :
31+ if el ['status' ] == 'online' :
32+ result .append ((el ['file_name' ], int (el ['file_size' ]), 2 , ids [el ['file_code' ]]))
33+ else :
34+ result .append ((ids [el ['file_code' ]], 0 , 1 , ids [el ['file_code' ]]))
35+ yield result
436
537
638class DdlstorageCom (XFileSharingPro ):
739 __name__ = "DdlstorageCom"
840 __type__ = "hoster"
9- __pattern__ = r"http://(?:\w*\.)*?ddlstorage.com/\w{12}"
10- __version__ = "0.07 "
41+ __pattern__ = r"http://(?:\w*\.)*?ddlstorage.com/(?P<ID> \w{12}) "
42+ __version__ = "1.00 "
1143 __description__ = """DDLStorage.com hoster plugin"""
1244 __author_name__ = ("zoidberg" , "stickell" )
1345 __author_mail__ = ("zoidberg@mujmail.cz" , "l.stickell@yahoo.it" )
1446
1547 FILE_INFO_PATTERN = r'<p class="sub_title"[^>]*>(?P<N>.+) \((?P<S>[^)]+)\)</p>'
1648 HOSTER_NAME = "ddlstorage.com"
1749
50+ def prepare (self ):
51+ self .getAPIData ()
52+ super (DdlstorageCom , self ).prepare ()
53+
54+ def getAPIData (self ):
55+ file_id = re .search (self .__pattern__ , self .pyfile .url ).group ('ID' )
56+ data = {'client_id' : 53472 ,
57+ 'file_code' : file_id }
58+ if self .user :
59+ passwd = self .account .getAccountData (self .user )["password" ]
60+ data ['req_type' ] = 'file_info_reg'
61+ data ['user_login' ] = self .user
62+ data ['user_password' ] = md5 (passwd ).hexdigest ()
63+ data ['sign' ] = md5 ('file_info_reg%d%s%s%s%s' % (data ['client_id' ], data ['user_login' ],
64+ data ['user_password' ], data ['file_code' ],
65+ '25JcpU2dPOKg8E2OEoRqMSRu068r0Cv3' )).hexdigest ()
66+ else :
67+ data ['req_type' ] = 'file_info_free'
68+ data ['sign' ] = md5 ('file_info_free%d%s%s' % (data ['client_id' ], data ['file_code' ],
69+ '25JcpU2dPOKg8E2OEoRqMSRu068r0Cv3' )).hexdigest ()
70+
71+ self .api_data = self .load ('http://www.ddlstorage.com/cgi-bin/api_req.cgi' , post = data )
72+ self .api_data = self .api_data .replace ('<pre>' , '' ).replace ('</pre>' , '' )
73+ self .logDebug ('API Data: ' + self .api_data )
74+ self .api_data = json_loads (self .api_data )[0 ]
75+
76+ if self .api_data ['status' ] == 'offline' :
77+ self .offline ()
1878
19- getInfo = create_getInfo (DdlstorageCom )
79+ if 'file_name' in self .api_data :
80+ self .pyfile .name = self .api_data ['file_name' ]
81+ if 'file_size' in self .api_data :
82+ self .pyfile .size = self .api_data ['size' ] = self .api_data ['file_size' ]
83+ if 'file_md5_base64' in self .api_data :
84+ self .api_data ['md5_ddlstorage' ] = self .api_data ['file_md5_base64' ]
0 commit comments