Last update: 2023-11-17

URLをパースする   Emacs EmacsLisp

Emacs Lispを使ってURLをパースする方法を調べてみた。

https://www.gnu.org/software/emacs/manual/html_node/url/URI-Parsing.html

url-generic-parse-url 関数を使うと良いらしい。

(url-generic-parse-url "https://www.youtube.com/watch?v=12345")
#s(url "https" nil nil "www.youtube.com" nil "/watch?v=12345" nil nil t nil t t)

これはURLパース結果が格納される構造体で、次のようにして要素にアクセスする。 変数 u には上記の結果が入っている。

(url-host u)
www.youtube.com
(url-type u)
https

URLの構造体について詳しく知りたければ url-generic-parse-url のHelpを見ると良い。 例えば下記のUSERを取得したいときは (url-user u) を実行する。

Return an URL-struct of the parts of URL.
The CL-style struct contains the following fields:

TYPE     is the URI scheme (string or nil).
USER     is the user name (string or nil).
PASSWORD is the password (string [deprecated] or nil).
HOST     is the host (a registered name, IP literal in square
         brackets, or IPv4 address in dotted-decimal form).
PORTSPEC is the specified port (a number), or nil.
FILENAME is the path AND the query component of the URI.
TARGET   is the fragment identifier component (used to refer to a
         subordinate resource, e.g. a part of a webpage).
ATTRIBUTES is nil; this slot originally stored the attribute and
         value alists for IMAP URIs, but this feature was removed
         since it conflicts with RFC 3986.
FULLNESS is non-nil if the hierarchical sequence component of
         the URL starts with two slashes, "//".