@chagold
אולי קשור:
ivrtikshoret
-
קובץ לפיענוח קוד מעורפל (deobfuscation) לאפליקציה -
לא מצליח להתחבר למסד נתונים בשרת שלי עם PDOר' גוגל ניסית לשאול?
-
מחפש אימולטור אנדרואיד שתומך בבלוטוסאני כרגע מנסה להוסיף אפליקציה של soundcore והוא כל הזמן נשאר בדף הפתיחה,
מצורף logcat
log.txt
אודה לכל מי שיוכל לבדוק את זה. -
שיתוף סקריפט nodejs להורדת אקסל תנועות עו"ש מבנק דיסקונט משנים קודמים באמצעות התיבה האישית@חוקר כתב בשיתוף סקריפט nodejs להורדת אקסל תנועות עו"ש מבנק דיסקונט משנים קודמים באמצעות התיבה האישית:
הייתי צריך כעת לשחזר נתונים מחשבון של קרוב המתנהל בבנק דיסקונט של משכנתא ששולמה בעבר והעברות שבוצעו לכיסוי המשכנתא.
בתנועות אחרונות ניתן לייצא (נכון לעכשיו, בבנק דיסקונט) עד שנה אחורה.
(יש שירות בדיסקונט של שיחזור דפי חשבון ישנים בצורת HTML אבל גם זה מוגבל ל3 שנים וניתן לייצא עד 17 דפים בבקשה אחת וצריך לסנן תאריכים ולשלם עמלה לכל בקשה ועדיין להשתגע להמיר את ה HTML לאקסל וכו'. קיצר לא לעניין).
מצאתי שבתיבה האישית קיימים הנתונים כדפי חשבון (בחשבון המבוקש היו לי למפרע מ 05/2016, אין לי מושג במה זה תלוי, אבל לי זה הספיק) אך הם מופיעים כדפי חשבון ומפוזרים בין המכתבים ולא שייך לסנן אותם וכו'.
ראיתי שזה מבוסס API שמקבל בשלב ראשון את רשימת המכתבים ובשלב שני API לקבל כל מכתב כמערך של השורות וכו'.
יצרתי לעצמי סקריפט שמסנן את המכתבים רק של דפי חשבון, שולף רק את השורות של התנועות, מצליב את השנה מהכותרת לתאריך (ללא השנה) בשורה, מצליב 2/3 שורות של פירוט תנועה בודדת לשורה אחת, ויוצר מהם קובץ אקסל.
בסקריפט צריך להזין ס"ה 2 נתונים, מספר החשבון ועוגיות הזדהות, וכמובן להריץ nodejs על המחשב/שרת.
לשימוש בסקריפט יש להזדהות באתר של דיסקונט עם הפרטים, ולאחר מכן יש ללחוץ על F12 ואח"כ ללחוץ על הלחצן של תיבת הדואר הפנימי בחשבון
כעת יופיע לנו ב network/רשת התחברות לAPI המבוקש
ניתן לסנן בקלות "mailQuery" ולראות את השורה.
נלחץ על השורה ובכותרת הבקשה נחפש את הקוקיז ונעתיק אותו
יש להדביק אותו בסקריפט (למותר לציין שזה רץ רק אצלכם במחשב והעוגיות לא עוברות לשרת אחר)
כמו"כ יש להעתיק את מספר החשבון כפי שהוא מופיע בכותרות ולהדביק בסקריפט במיקום המבוקש
וזהו נותר רק להריץ אץ הסקריפט ובסיומו יש לנו אקסל מסודר להפליא עם היסטוריית תנועות ישנות.
בתקוה שהקוד יביא תועלת למישהו.
שימו לב השתמשתי בקוד ב 3 ספריות חיצונית: node-fetch, moment, json2xls.
השימוש בסקריפט הינו על אחריות המשתמש בלבד ואיני נושא בשום נזק שיגרם חלילה על ידי השימוש בו.
(לי זה עבד ללא בעיות).
להלן הקודlet fetch = require('node-fetch'); let fs = require('fs'); const moment = require('moment'); const json2xls = require('json2xls'); // כאן יש להדביק את מספר החשבון let accountNumber = "0012300000"; // כאן יש להדביק את הקוקיז let cookie = "PD_STATEFUL_fadfads......."; let MessagesList = []; let MessageID = ''; let pgnToDate = ""; let pgnSubjectID = ""; let pgnYear = 0; let pgnVer = 0; let pgnNum = 0; let MessagesData = []; let months = ["ינואר", "פברואר", "מרץ", "אפריל", "מאי", "יוני", "יולי", "אוגוסט", "ספטמבר", "אוקטובר", "נובמבר", "דצמבר"]; let lines = []; (async () => { let next = true; while (next) { let body = { "AccountNumber": accountNumber, "ListOrContentFlag": "listnotjoined", "StatusFilter": "U", "FromDate": "", "ToDate": "", "NumberOfBackDays": 3 }; if (MessageID) { body = { "AccountNumber": accountNumber, "ListOrContentFlag": "listnotjoined", "StatusFilter": "U", "FromDate": "", "ToDate": "", "NumberOfBackDays": 3, "MessageID": MessageID, "PgnToDate": pgnToDate, "PgnSubjectID": pgnSubjectID, "PgnYear": pgnYear, "PgnVer": pgnVer, "PgnNum": pgnNum } } // console.log(body); await fetch("https://start.telebank.co.il/Titan/gatewayAPI/discountMail/mailQuery", { "headers": { "content-type": "application/json;charset=UTF-8", "cookie": cookie, }, "body": JSON.stringify(body), "method": "POST" }).then(res => res.json()).then(MailQuery => { if (MailQuery.MailQuery && MailQuery.MailQuery.PaginationBlock) { MessageID = MailQuery.MailQuery.PaginationBlock.PaginationMessageID; pgnToDate = MailQuery.MailQuery.PaginationBlock.PaginationMessageCreationDate; pgnSubjectID = MailQuery.MailQuery.PaginationBlock.PaginationMessageSubject; pgnYear = MailQuery.MailQuery.PaginationBlock.PaginationMessageYear; pgnVer = MailQuery.MailQuery.PaginationBlock.PaginationMessageVersion; pgnNum = MailQuery.MailQuery.PaginationBlock.PaginationPageNumber; next = true; } else { next = false; } try { if (MailQuery.MailQuery.MessageInfo){ MessagesList.push(...MailQuery.MailQuery.MessageInfo) } } catch (e) { console.log(e); } }).catch(console.error); } // console.log(MessagesList); for (let i = 0; i < MessagesList.length; i++) { let message = MessagesList[i]; if (message.SubjectID === 'COH012') { console.log('MessageIDNumber: ' + message.MessageIDNumber, 'index: ' + i, 'from: ' + MessagesList.length); await fetch("https://start.telebank.co.il/Titan/gatewayAPI/discountMail/mailQuery", { "headers": { "content-type": "application/json;charset=UTF-8", "cookie": cookie, }, "body": "{\"ListOrContentFlag\":\"content\",\"AccountNumber\":\"0096343062\",\"MessageIdForDetails\":\"" + message.MessageIDNumber + "\"}", "method": "POST" }).then(res => res.json()).then(MailQuery => { try { let LineInfoEntry = MailQuery.MailQuery.MessageInfo[0].PageInfoBlock.PageInfoEntry[0].LineInfoBlock.LineInfoEntry; if (LineInfoEntry){ console.log('ok'); MessagesData.push(...LineInfoEntry) let month = LineInfoEntry[3].LineTextMessage.slice(1).match(months.join("|"))[0]; let start = 1 + month.length + 1; let year = LineInfoEntry[3].LineTextMessage.substr(start, 4); LineInfoEntry = LineInfoEntry.slice(4); for (let i in LineInfoEntry){ let row = LineInfoEntry[i]; if (/^ \d/.test(row.LineTextMessage)){ let i = 1; let obj = {}; obj['תאריך'] = moment(row.LineTextMessage.substr(i, 5) + '/' + year, 'DD/MM/YYYY').format('YYYY-MM-DD');i++; i = i + 5; obj['תאריך ערך'] = row.LineTextMessage.substr(i, 1) !== ' ' ? moment(row.LineTextMessage.substr(i, 5) + '/' + year, 'DD/MM/YYYY').format('YYYY-MM-DD') : '';i++; i = i + 5; obj['סוג'] = row.LineTextMessage.substr(i, 1);i++; i = i + 1; obj['תיאור'] = row.LineTextMessage.substr(i, 31);i++; i = i + 31; obj['אסמכתא'] = row.LineTextMessage.substr(i, 10);i++; i = i + 10; obj['זכות'] = parseFloat(row.LineTextMessage.substr(i, 10).replace(',', '').trim());i++; i = i + 10; if (isNaN(obj['זכות'])){ obj['זכות'] = ''; } obj['חובה'] = parseFloat(row.LineTextMessage.substr(i, 10).replace(',', '').trim());i++; i = i + 10; if (isNaN(obj['חובה'])){ obj['חובה'] = ''; } obj['יתרה'] = parseFloat(row.LineTextMessage.substr(i, 10).replace(',', '').trim());i++; i = i + 10; if (isNaN(obj['יתרה'])){ obj['יתרה'] = ''; } obj['תוכן'] = row.LineTextMessage; lines.push(obj); } else if (row.LineTextMessage.slice(1).match(months.join("|"))){ month = row.LineTextMessage.slice(1).match(months.join("|"))[0]; year = row.LineTextMessage.substr(1 + month.length + 1, 4); } else if (/^\s{15}\S/.test(row.LineTextMessage)){ lines[lines.length - 1]['תיאור'] += row.LineTextMessage.slice(15, 31); if (row.LineTextMessage.slice(81, 10) !== ''){ lines[lines.length - 1]['יתרה'] += row.LineTextMessage.slice(81, 10); } lines[lines.length - 1]['תוכן'] += '|' + row.LineTextMessage; }else if (/^\s{75}\S/.test(row.LineTextMessage)) { lines[lines.length - 1]['אסמכתא'] += row.LineTextMessage.substr(75, 10); if (row.LineTextMessage.slice(81, 10) !== ''){ lines[lines.length - 1]['יתרה'] += row.LineTextMessage.slice(81, 10); } lines[lines.length - 1]['תוכן'] += '|' + row.LineTextMessage; } } } } catch (e) { console.log(e); } }).catch(console.error); } } console.log(lines); fs.writeFileSync('./MessagesData ' + moment().unix() + '.json', JSON.stringify(MessagesData)); fs.writeFileSync('./lines ' + moment().unix() + '.json', JSON.stringify(lines)); let excel = json2xls(lines); fs.writeFileSync('./lines ' + moment().unix() + '.xlsx', excel, 'binary'); })();
יש אפשרות הרבה יותר קלה אבל לצערי לא אוכל לכתוב את זה פה
תבדקו טוב ותראו לבד...