blob: a9005d5f1fcdd5db31503817844eb383d2b2ddb1 (
about) (
plain)
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
|
;;; Guile Feed --- Feed command-line interface.
;;; Copyright © 2018 Oleg Pykhalov <go.wigust@gmail.com>
;;;
;;; This file is part of Guile Feed.
;;;
;;; Guile Feed is free software; you can redistribute it and/or modify
;;; it under the terms of the GNU General Public License as published
;;; by the Free Software Foundation; either version 3 of the License,
;;; or (at your option) any later version.
;;;
;;; Guile Feed 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
;;; General Public License for more details.
;;;
;;; You should have received a copy of the GNU General Public License
;;; along with Guile Feed. If not, see
;;; <http://www.gnu.org/licenses/>.
(define-module (feed scripts rss)
#:use-module (guix scripts)
#:use-module (guix ui)
#:use-module (ice-9 match)
#:use-module (ice-9 pretty-print)
#:use-module (feed rss)
#:use-module (srfi srfi-1)
#:use-module (srfi srfi-11)
#:use-module (srfi srfi-26)
#:use-module (srfi srfi-37)
#:export (feed-rss))
;;;
;;; Command-line options.
;;;
(define %default-options
;; Alist of default option values.
'())
(define %options
(list (option '(#\h "help") #f #f
(lambda args
(show-help)
(exit 0)))
(option '(#\o "output-file") #t #f
(lambda (opt name arg result)
(alist-cons 'output-file arg result)))
(option '(#\s "search") #t #f
(lambda (opt name arg result)
(alist-cons 'search arg result)))
(option '("show") #t #t
(lambda (opt name arg result)
(alist-cons 'show arg result)))))
(define (show-help)
(display "Usage: guix rss -o FILE\n")
(newline)
(display "
-h, --help display this help and exit")
(display "
-V, --version display version information and exit")
(display "
-o, --output-file=FILE convert rss to LISP FILE")
(display "
-s, --search=REGEXP search in name and description using REGEXP")
(display "
--show=RSS show details about RSS")
(newline))
;;;
;;; Entry point.
;;;
(define (feed-rss . args)
(define (parse-options)
;; Return the alist of option values.
(parse-command-line args %options (list %default-options)
#:build-options? #f))
(let* ((opts (parse-options))
(output (assoc-ref opts 'output-file))
(search (assoc-ref opts 'search))
(show (assoc-ref opts 'show)))
(cond (show
(leave-on-EPIPE
(for-each (cute feed->recutils <>)
(find-feeds-by-name show))))
(search
(let* ((patterns (filter-map (match-lambda
(('search . rx) rx)
(_ #f))
opts))
(regexps (map (cut make-regexp* <> regexp/icase) patterns)))
(leave-on-EPIPE
(let-values (((rss scores)
(find-feeds-by-description regexps)))
(for-each (lambda (rss score)
(feed->recutils rss
#:extra-fields
`((relevance . ,score))))
rss
scores)))
#t))
(output
(with-output-to-file output
(lambda _ (pretty-print (feeds->lisp))))))))
|