среда, 11 мая 2016 г.

Russian Post Tracking

Russian Post Tracking Strike Back
Много воды и прочих паражняков утекло с тех пор когда я касался трэкинга почты России, Почта России здорово обновила сайт сильно упростив жизнь своим пользователям с одной стороны и усложнив с другой, подавшись модным тенденциям возвращать результат в формате json что в общем не так уж и плохо когда есть jq
jq я собрал локально для того что бы использовать последнюю версию, вместо древнего говна из сис. пакетов.

И так сам скрипт для отслеживания массива посылок:

 #!/bin/bash  
 jq=/www/html/dash/track/jq-1.5/jq  
 wrkdir=/www/html/dash/track  
 output=$wrkdir/index.html  
 echo > $output   
 tr="RR378888188JP RI916069826CN LM014443717CN LQ01153473CN LQ019679594CN RP359667345SG"  
 for i in $tr; do  
      echo $i  
      wget "https://www.pochta.ru/tracking?p_p_id=trackingPortlet_WAR_portalportlet&p_p_lifecycle=2&p_p_state=normal&p_p_mode=view&p_p_resource_id=getList&p_p_cacheability=cacheLevelPage&p_p_col_id=column-1&p_p_col_count=1&barcodeList=$i&postmanAllowed=true&_=1461757915398" -O $wrkdir/$i.html  
      $jq '.[][] .trackingItem | .barcode, .originCountryName, .title' $wrkdir/$i.html >> $output  
      echo "</br>" >> $output  
      $jq '.[][] .trackingItem | .trackingHistoryItemList[] | "\(.date) \(.humanStatus) \(.description)"' $wrkdir/$i.html >> $output  
      echo "</br>" >> $output  
      echo "</br>" >> $output  
      echo "</br>" >> $output  
 done  

запрос
wget "https://www.pochta.ru/tracking?p_p_id=trackingPortlet_WAR_portalportlet&p_p_lifecycle=2&p_p_state=normal&p_p_mode=view&p_p_resource_id=getList&p_p_cacheability=cacheLevelPage&p_p_col_id=column-1&p_p_col_count=1&barcodeList=RI916069826CN&postmanAllowed=true&_=1461757915398" -O /tmp/RI916069826CN.html  
вернёт json ответ в файл  /tmp/RI916069826CN.html 
ответ выглядит так:
 {"list":[{"officeSummary":null,"postmanDeliveryInfo":null,"formF22Params":null,"userTrackingItemId":null,"userTitle":null,"itemAddedDate":null,"deleteDate":null,"lastOperationViewed":false,"deleted":false,"autoAdded":false,"lastOperationViewedTimestamp":null,"trackingItem":{"destinationCountryName":"Россия","destinationCountryNameGenitiveCase":"России","originCountryName":"Япония","originCityName":null,"mailRank":0,"mailCtg":1,"postMark":0,"insurance":null,"isDestinationInInternationalTracking":true,"isOriginInInternationalTracking":true,"futurePathList":[],"cashOnDeliveryEventsList":null,"sender":null,"recipient"  
это только кусок ответа, на самом деле он раз в 10 больше.
Без пайтона или jq бороться с этой мешаниной скобочек и кавычек нихуя не хочется. и не можется. Поэтому мы берём jq и быстренько лепим 2 запроса
1.
 '.[][] .trackingItem | .barcode, .originCountryName, .title'  


вернёт нам:  "RI916069826CN" "Япония" "Мелкий пакет из Японии" 

2.
 '.[][] .trackingItem | .trackingHistoryItemList[] | "\(.date) \(.humanStatus) \(.description)"'  

вернёт нам сам трэк посылки:
"2016-05-06T19:06:00.000+03:00 Получено адресатом Москва 123" "2016-05-04T04:40:00.000+03:00 Ожидает адресата в месте вручения Москва 123" "2016-05-03T02:47:00.000+03:00 Покинуло сортировочный центр Москва МСП-1 МПКО-Центр Уомпо" "2016-05-01T22:22:00.000+03:00 Передано в доставку по России Мр Лц Внуково Цех-2" "2016-04-30T11:20:00.000+03:00 Прием на таможню Мр Лц Внуково Цех-1" "2016-04-30T11:20:00.000+03:00 Выпущено таможней Мр Лц Внуково Цех-2" "2016-04-30T10:54:00.000+03:00 Прошло регистрацию Мр Лц Внуково Цех-3" "2016-04-29T04:42:00.000+03:00 Прибыло на территорию России Шереметьево ММПО PCI-7" "2016-04-26T16:00:00.000+09:00 Ожидает отправку из Японии Япония" "2016-04-25T14:10:00.000+09:00 Принято в отделении связи Япония"


складываем это всё бережно в index.html и отдаём в любой web сервер.