1: <?php
2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37:
38: namespace MOC\Module\Network\ParcelTracker\Carrier;
39: use MOC\Api;
40: use MOC\Generic\Device\Module;
41: use MOC\Module\Network\ParcelTracker\Carrier;
42: use MOC\Module\Network\ParcelTracker\Parcel;
43:
44: 45: 46:
47: class HermesGermany extends Carrier implements Module {
48: 49: 50: 51: 52: 53:
54: public static function InterfaceInstance() {
55: return new HermesGermany();
56: }
57:
58: 59: 60: 61: 62: 63:
64: public static function InterfaceDepending() {
65: return Api::Core()->Depending();
66: }
67:
68: 69: 70: 71: 72: 73:
74: public static function InterfaceChangelog() {
75: return Api::Core()->Changelog()->Create( __CLASS__ );
76: }
77:
78: 79: 80: 81: 82:
83: function GetStatus( $TrackingNumber ) {
84:
85: $this->SetTarget( 'https://www.myhermes.de/wps/portal/paket/Home/privatkunden/sendungsverfolgung' );
86: $DOM = $this->GetData();
87:
88:
89: $SubmitFormObject = null;
90: $SubmitForm = $DOM->getElementsByTagName('form');
91: $SubmitFormLength = $SubmitForm->length;
92: for( $Run = 0; $Run < $SubmitFormLength; $Run++ ) {
93: $FormItem = $SubmitForm->item( $Run );
94: $FormAttributeList = $FormItem->attributes;
95: if( ($FormId = $FormAttributeList->getNamedItem('id')) ) {
96: if( false !== strpos( $FormId->nodeValue, 'shipmentTracingDTO' ) ) {
97: $SubmitFormObject = $FormItem;
98: break;
99: }
100: }
101: }
102:
103: if( $SubmitFormObject ) {
104:
105: $Target = '';
106:
107: $FormElementList = $SubmitFormObject->getElementsByTagName('input');
108: $FormElementListLength = $FormElementList->length;
109: for( $Run = 0; $Run < $FormElementListLength; $Run++ ) {
110: $FormElementAttributeList = $FormElementList->item( $Run )->attributes;
111: $FieldName = $FormElementAttributeList->getNamedItem('name')->nodeValue;
112: $FieldValue = $FormElementAttributeList->getNamedItem('value')->nodeValue;
113:
114: if( $FieldName == 'shipmentID' ) {
115: $FieldValue = $TrackingNumber;
116: }
117:
118: if( !empty( $Target ) ) {
119: $Target .= '&';
120: }
121: $Target .= $FieldName.'='.urlencode( $FieldValue );
122: }
123: $this->SetTarget( 'https://www.myhermes.de'.$SubmitFormObject->attributes->getNamedItem('action')->nodeValue.'?'.$Target );
124: $DOM = $this->GetData();
125: }
126:
127:
128:
129: $StatusTableObject = null;
130: $StatusTable = $DOM->getElementsByTagName('table');
131: $StatusTableLength = $StatusTable->length;
132: for( $Run = 0; $Run < $StatusTableLength; $Run++ ) {
133: $TableItem = $StatusTable->item( $Run );
134: $TableAttributeList = $TableItem->attributes;
135: if( ($TableClassString = $TableAttributeList->getNamedItem('class')) ) {
136: if( false !== strpos( $TableClassString->nodeValue, 'table_shipmentDetails' ) ) {
137: $StatusTableObject = $TableItem;
138: break;
139: }
140: }
141: }
142:
143: $Parcel = new Parcel( $TrackingNumber, $this->GetTarget() );
144:
145: if( $StatusTableObject ) {
146:
147:
148: $StatusRow = $StatusTableObject->getElementsByTagName('tr');
149:
150: $StatusRowLength = $StatusTableObject->getElementsByTagName('tr')->length -1;
151: for( $Run = 1; $Run < $StatusRowLength; $Run++ ) {
152:
153: $Row = $StatusRow->item( $Run );
154: $Col = $Row->getElementsByTagName('td');
155:
156: $TrackingLocation = '';
157: $TrackingTimestamp = strtotime( $this->NodeValue( $Col->item(0)->nodeValue ).$this->NodeValue( $Col->item(1)->nodeValue ) );
158: $TrackingMessage = $this->NodeValue( $Col->item(2)->nodeValue );
159:
160: $Parcel->AddStatus( $TrackingTimestamp, $TrackingMessage, $TrackingLocation );
161: }
162: }
163:
164: return $Parcel;
165: }
166: }
167: