Venturing into Emacs lisp and Helm. Here's a go at listing all URLs in current buffer.
(require 'goto-addr)
(defun ar/helm-buffer-url-candidates ()
"Generate helm candidates for all URLs in buffer."
(save-excursion
(goto-char (point-min))
(let ((helm-candidates '())
(url))
(while (re-search-forward goto-address-url-regexp
nil t)
(setq url
(buffer-substring-no-properties (match-beginning 0)
(match-end 0)))
(add-to-list 'helm-candidates
(cons url
url)))
helm-candidates)))
(defun ar/helm-buffer-urls ()
"Narrow down and open a URL in buffer."
(interactive)
(helm :sources `(((name . "Buffer URLs")
(candidates . ,(ar/helm-buffer-url-candidates))
(action . (lambda (url)
(browse-url url)))))))