Как получить содержимое или заголовок страницы википедии с помощью erlang?

-module(wikipedia).
-export([main/0]).
-define(Url, "http://en.wikipedia.org/w/api.php?format=xml&action=parse&prop=sections&page=Chicago").
-define(Match, "^[A-Za-z]+[A-Za-z0-9]*$").

main() ->
    inets:start(),
    %% Start ssl application
  ssl:start(),
    {ok, {_Status, _Header, Body}} = httpc:request(?Url),
    T = re:run(Body, ?Match, [{capture, all_but_first, binary}]),
    io:format("~s~n",[T]).

Я хочу сохранить содержимое страницы википедии в «T», используя регулярное выражение Match. И тогда я собирался получить титул. Но этот приведенный выше код говорит nomatch. Я не понимаю, как получить заголовок страницы википедии с помощью erlang. Пожалуйста, помогите. (Я новичок в erlang). [Я хочу что-то вроде: https://stackoverflow.com/questions/13459598/how-to-get-titles-from-a-wikipedia-page


person hithard    schedule 29.07.2017    source источник
comment
В какой строке ошибка nomatch? Можете ли вы включить трассировку стека в свой вопрос?   -  person Stratus3D    schedule 29.07.2017
comment
Кроме того, эта страница имеет формат xml, поэтому я бы рекомендовал использовать erlang.org/doc/apps. /xmerl/xmerl_ug.html для анализа XML и извлечения нужного содержимого.   -  person Stratus3D    schedule 29.07.2017
comment
Вывод не показывает соответствия. @Stratus3D   -  person hithard    schedule 30.07.2017
comment
Ах, хорошо, так что вызов io:format/2 печатает nomatch, что означает, что это значение T. Это означает, что вызов re:run/3 не нашел ничего, соответствующего вашему регулярному выражению.   -  person Stratus3D    schedule 31.07.2017
comment
Это имело бы смысл, поскольку ваше регулярное выражение не допускает ничего, кроме букв и цифр, но XML будет содержать много других символов. Что это регулярное выражение должно делать?   -  person Stratus3D    schedule 31.07.2017
comment
Моя цель состояла в том, чтобы получить заголовок и резюме. Я тестировал код, может ли он что-нибудь получить или нет (вот почему это регулярное выражение). Можете ли вы помочь мне с этим? Это будет полезно. @Stratus3D   -  person hithard    schedule 01.08.2017
comment
Если вы хотите узнать, извлекла ли команда что-нибудь, вам не нужно регулярное выражение. Весь XML должен быть возвращен, если вы удалите вызов re:run/3 и вместо этого просто напечатаете тело.   -  person Stratus3D    schedule 01.08.2017


Ответы (1)


Во-первых, я думаю, что заголовок уже есть в вашем URL-адресе: «Чикаго», в этом случае просто шаблон соответствует URL-адресу, чтобы получить заголовок. Если это не так, я предлагаю вам использовать модуль синтаксического анализа XML, такой как xmlerl:

-module(parse_title).
-include_lib("xmerl/include/xmerl.hrl").

-export([main/0]).

main() ->
  inets:start(),
  ssl:start(),
  U =  "http://en.wikipedia.org/w/api.php?format=xml&action=parse&prop=sections&page=Chicago",
  {ok, {_, _, Body}} = httpc:request(U),
  {Xml,_} = xmerl_scan:string(Body),
  [Title|_] = [Value || #xmlAttribute{value = Value} <- xmerl_xpath:string("//api/parse/@title", Xml)],
  Title.
person codeadict    schedule 02.08.2017