Компиляция выходных данных API в формате XML в R

Я искал везде, пытаясь найти ответ на этот вопрос, и я еще не совсем нашел то, что ищу, поэтому я надеюсь, что прямой вопрос поможет.

Я работаю с API отслеживания USPS, который обеспечивает вывод в формате XML. API ограничен 35 результатами на вызов (т. е. вы можете предоставить только 35 номеров отслеживания, чтобы получать информацию о каждом вызове API), и мне нужна информация примерно о 90 000 номеров отслеживания, поэтому я запускаю свои вызовы в цикле for. Мне удалось сохранить результаты звонка в виде списка, но затем у меня возникли проблемы с экспортом списка как есть во что-либо пригодное для использования. Однако, когда я попытался преобразовать результаты из списка в JSON, он удалил тег атрибута, который содержал номер отслеживания, который я использовал для создания результатов.

Вот как выглядит образец результата:

<TrackResponse>

<TrackInfo ID = "XXXXXXXXXXX1">

<TrackSummary> Your item was delivered at 6:50 am on February 6 in BARTOW FL 33830.</TrackSummary>

<TrackDetail>February 6 6:49 am NOTICE LEFT BARTOW FL 33830</TrackDetail>

<TrackDetail>February 6 6:48 am ARRIVAL AT UNIT BARTOW FL 33830</TrackDetail>

<TrackDetail>February 6 3:49 am ARRIVAL AT UNIT LAKELAND FL 33805</TrackDetail>

<TrackDetail>February 5 7:28 pm ENROUTE 33699</TrackDetail>

<TrackDetail>February 5 7:18 pm ACCEPT OR PICKUP 33699</TrackDetail>

Вот скрипт, который я запустил, чтобы получить вывод, с которым я сейчас работаю:

final_tracking_info <- list()

for (i in 1:x) { # where x = the number of calls to the API the loop will need to make
  
  usps = input_tracking_info[i] # input_tracking_info = GET commands
  
  usps = read_xml(usps)
  
  final_tracking_info1[[i+1]]<-usps$TrackResponse
  
  gc()
}

final_output <- toJSON(final_tracking_info)
write(final_output,"final_tracking_info.json") # tried converting to JSON, lost the ID attribute

cat(capture.output(print(working_list),file = "Final_Tracking_Info.txt")) # exported the list to a textfile, was not an ideal format to work with

Что я в конечном итоге хочу получить из этих данных, так это таблицу, содержащую номер отслеживания, первую и последнюю детали трека. Мне интересно, есть ли лучший способ скомпилировать это в XML/JSON, который облегчит преобразование в tibble/df в будущем? Есть ли какой-либо простой способ/предпочтительный формат для выбора, основываясь на том факте, что я знаю, что большинство столбцов будут иметь одно и то же имя («Детали дорожки»), а DF должны быть разной длины (поскольку каждый пакет будет иметь разный номер деталей трека), когда я пытаюсь скомпилировать 1000 результатов в один окончательный вывод?

Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
2
0
25
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Использование XML::xmlToList() сохранит атрибут ID в .attrs:

$TrackSummary
[1] " Your item was delivered at 6:50 am on February 6 in BARTOW FL 33830."

$TrackDetail
[1] "February 6 6:49 am NOTICE LEFT BARTOW FL 33830"

$TrackDetail
[1] "February 6 6:48 am ARRIVAL AT UNIT BARTOW FL 33830"

$TrackDetail
[1] "February 6 3:49 am ARRIVAL AT UNIT LAKELAND FL 33805"

$TrackDetail
[1] "February 5 7:28 pm ENROUTE 33699"

$TrackDetail
[1] "February 5 7:18 pm ACCEPT OR PICKUP 33699"

$.attrs
            ID 
"XXXXXXXXXXX1" 

Способ использования этого вывода, который предполагает, что Summary и ID всегда присутствуют как первый и последний элементы соответственно:

xml_data <- XML::xmlToList("71563898.xml") %>%
  unlist() %>% # flattening
  unname() # removing names

data.frame (
  ID = tail(xml_data, 1), # getting last element
  Summary = head(xml_data, 1), # getting first element
  Info = xml_data %>% head(-1) %>% tail(-1) # remove first and last elements
)

Другие вопросы по теме