1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
|
#!/usr/bin/env python
"""
ownCloud - News
@author Bernhard Posselt
@copyright 2012 Bernhard Posselt nukeawhale@gmail.com
This library is free software; you can redistribute it and/or
modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE
License as published by the Free Software Foundation; either
version 3 of the License, or any later version.
This library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU AFFERO GENERAL PUBLIC LICENSE for more details.
You should have received a copy of the GNU Affero General Public
License along with this library. If not, see <http://www.gnu.org/licenses/>.
"""
# This script uses python 3
import sys
import time
import json
import argparse
import queue
import urllib.request
import urllib.error
class Updater:
def __init__(self, base_url, user, password, threads):
self.threads = threads
self.user = user
self.password = password
self.base_url = base_url
if self.base_url[-1] != '/':
self.base_url += '/'
self.base_url += 'index.php/apps/news/api/v1-2'
self.cleanup_url = '%s/cleanup' % self.base_url
self.all_feeds_url = '%s/feeds/all' % self.base_url
self.update_url = '%s/feeds/update' % self.base_url
def run(self):
try:
auth = urllib.request.HTTPPasswordMgrWithDefaultRealm()
auth.add_password(None, self.base_url, self.user, self.password)
auth_handler = urllib.request.HTTPBasicAuthHandler(auth)
opener = urllib.request.build_opener(auth_handler)
urllib.request.install_opener(opener)
urllib.request.urlopen(self.cleanup_url)
feeds_response = urllib.request.urlopen(self.all_feeds_url)
feeds_json = str( feeds_response.read() )
feeds = json.loads(feeds_json)
# TODO: create feeds requests and thread the requests
# TODO: also check for the other URLErrors
except (ValueError, urllib.error.HTTPError):
print('%s is either not valid or does not exist' % self.base_url)
exit(1)
class Daemon:
def run(self, timeout, runner):
"""
This is for running the updater with a certain timeout between the
updates
"""
runner.run()
time.sleep(timeout)
run(timeout, runner)
def main():
parser = argparse.ArgumentParser()
parser.add_argument('--threads',
help='How many feeds should be fetched in paralell, defaults to 10',
default=10)
parser.add_argument('--interval',
help='Update interval between fetching the next round of \
updates in minutes, defaults to 30 minutes',
default=30)
parser.add_argument('--user',
help='A username to log into ownCloud', required=True)
parser.add_argument('--password',
help='A password to log into ownCloud', required=True)
parser.add_argument('url',
help='The URL where owncloud is installed')
args = parser.parse_args()
updater = Updater(args.url, args.user, args.password, args.threads)
daemon = Daemon()
daemon.run(args.interval, updater)
if __name__ == '__main__':
main()
|