From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.io!.POSTED.blaine.gmane.org!not-for-mail From: GH Newsgroups: gmane.emacs.help Subject: Re: functions to download mailing list archives Date: Mon, 13 Jun 2022 14:43:04 +0200 Organization: Huh? me? Message-ID: <87h74ozqcn.fsf@gnu.org> References: <87r13tikgn.fsf@gnu.org> <878rq1cwl9.fsf@telefonica.net> Reply-To: project@gnuhacker.org Mime-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable Injection-Info: ciao.gmane.io; posting-host="blaine.gmane.org:116.202.254.214"; logging-data="1261"; mail-complaints-to="usenet@ciao.gmane.io" Cc: Help GNU Emacs To: =?utf-8?Q?=C3=93scar?= Fuentes Original-X-From: help-gnu-emacs-bounces+geh-help-gnu-emacs=m.gmane-mx.org@gnu.org Mon Jun 13 14:44:46 2022 Return-path: Envelope-to: geh-help-gnu-emacs@m.gmane-mx.org Original-Received: from lists.gnu.org ([209.51.188.17]) by ciao.gmane.io with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1o0jQz-000050-QX for geh-help-gnu-emacs@m.gmane-mx.org; Mon, 13 Jun 2022 14:44:45 +0200 Original-Received: from localhost ([::1]:48582 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1o0jQy-0001XI-Oc for geh-help-gnu-emacs@m.gmane-mx.org; Mon, 13 Jun 2022 08:44:44 -0400 Original-Received: from eggs.gnu.org ([2001:470:142:3::10]:50462) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1o0jPX-0000jq-JE for help-gnu-emacs@gnu.org; Mon, 13 Jun 2022 08:43:16 -0400 Original-Received: from mta763.solicitae.com ([89.35.150.78]:51188 helo=smtp.gnuhacker.org) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1o0jPT-0005Dj-86 for help-gnu-emacs@gnu.org; Mon, 13 Jun 2022 08:43:15 -0400 Original-Received: from encrypted.gnu.org (localhost [127.0.0.1]) by smtp.gnuhacker.org (Postfix) with ESMTP id 902BC6008EE; Mon, 13 Jun 2022 14:43:04 +0200 (CEST) In-Reply-To: <878rq1cwl9.fsf@telefonica.net> (=?utf-8?Q?=22=C3=93scar?= Fuentes"'s message of "Mon, 13 Jun 2022 01:04:34 +0200") Received-SPF: none client-ip=89.35.150.78; envelope-from=project@gnuhacker.org; helo=smtp.gnuhacker.org X-Spam_score_int: -16 X-Spam_score: -1.7 X-Spam_bar: - X-Spam_report: (-1.7 / 5.0 requ) BAYES_00=-1.9, KHOP_HELO_FCRDNS=0.187, SPF_HELO_NONE=0.001, SPF_NONE=0.001, T_SCC_BODY_TEXT_LINE=-0.01 autolearn=no autolearn_force=no X-Spam_action: no action X-BeenThere: help-gnu-emacs@gnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Users list for the GNU Emacs text editor List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: help-gnu-emacs-bounces+geh-help-gnu-emacs=m.gmane-mx.org@gnu.org Original-Sender: "help-gnu-emacs" Xref: news.gmane.io gmane.emacs.help:137791 Archived-At: =C3=93scar Fuentes writes: > Instead of a recursive function use a recursive data structure: a list. > The outer function puts in the list the initial URL, and then, in a > loop, pops from the list a URL, downloads it, adds to the list the > referenced URLs and repeats until the list is empty or some other > condition is met. > Some complications may remain: for instance, you need to detect cycles > (the failure on your posted code probably comes from that). A list also > comes handy for that, if you walk the list with dolist instead of > popping elements and add new ones with add-to-list, which omits elements > which are already in the list. I dont know how. Maybe some like: #+begin_src elisp (defun lists-mbox-recursive-url-list (url-head id date) (with-current-buffer "*eww*" (shr-next-link) (let ((url (thing-at-point 'url))) (if (string-match (format "%s/archive/mbox/%s/%s\\(.+\\)" url-head id= date) url) (add-to-list url-list url))) (if (save-excursion (shr-next-link)) (lists-mbox-recursive-url-list url-head id date) url-list))) (let ((url-list '())) (with-current-buffer "*eww*" (beginning-of-buffer) (lists-mbox-recursive-url-list "https://lists.gnu.org" "help-gnu-emacs"= 201))) #+end_src But return an error that I dont understand: Debugger entered--Lisp error: (setting-constant nil) add-to-list(nil "https://lists.gnu.org/archive/mbox/help-gnu-emacs/...") (if (string-match (format "%s/archive/mbox/%s/%s\\(.+\\)" url-head id dat= e) url) (add-to-list url-list url)) (let ((url (thing-at-point 'url))) (if (string-match (format "%s/archive/= mbox/%s/%s\\(.+\\)" url-head id date) url) (add-to-list url-list url))) (save-current-buffer (set-buffer "*eww*") (shr-next-link) (let ((url (thi= ng-at-point 'url))) (if (string-match (format "%s/archive/mbox/%s/%s\\(.+\\= )" url-head id date) url) (add-to-list url-list url))) (if (save-excursion = (shr-next-link)) (lists-mbox-recursive-url-list url-head id date) url-list)) lists-mbox-recursive-url-list("https://lists.gnu.org" "help-gnu-emacs" 20= 1) ... What mean "error: (setting-constant nil)"