@לעזור-לכולם אמר בשיתוף סקריפט 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');
})();
@sivan22 אמר במעוניין ללמוד לכתוב קוד VBA לשליחת מייל מאקסס עם המון נתונים מתוך שאילתא. תעזרו לי?:
אנגלית היא חובה בשביל מתכנתים
אני הייתי כותב "פלוס גדול" ולא חובה.
אני מתכנת עם הישגים יפים מאוד ב"ה ולא מבין אנגלית.
אבל בהחלט שזה קשור ג"כ לחלק השני שכתבת
@sivan22 אמר במעוניין ללמוד לכתוב קוד VBA לשליחת מייל מאקסס עם המון נתונים מתוך שאילתא. תעזרו לי?:
ויכולת לימוד לבד (אוטודידקט) היא המפתח להצלחה.
זה יכול מאוד לפתור את בעיית הלא להבין אנגלית..
@WWW אמר בהמדחס לא נדלק לסירוגין:
@חוקר זו לא הבעיה אצלי.
כאמור אני מדבר בזמן שזה אמור לעבוד.
לא הבנתי כ"כ מה ענית, אם החיישן נמצא במיקום הלא נכון אם כן המזגן לא יודע נכון מתי עליו להמשיך לעבוד, מבחינתו הוא הגיע לטמפרטורה הרצויה
אני ראיתי אצלי במזגן תדיראן אלפא 10 שטכנאי הראה לי שהחיישן/רגש של הטמפרטורה יכול להיות מושחל כלפי הצינורות היוצאים מהמזגן למדחס ויכול/אמור להיות מושחל לכיוון האוויר הנשאף מהחדר למזגן, שזה לכאורה הבחירה הנכונה כי אז הרגש מודע נכון לטמפרטורת החדר.
אצלי הוא העביר מכלפי חוץ אל התעלה בכניסת האויר למזגן ואז זה שיפר קצת את המצב
חבר שהמייל שלו נחסם ביקש את עזרתי.
אין לו שמץ של מושג למה זה חסום אבל זו ההודעה שמוצגת לו, שזה חסום כי הייתה הפרה של התנאים וההגבלות של גוגל.
הוא מנסה ליצור קשר טלפוני עם גוגל להבין על מה ולמה.
יש פיתרונות?
לא יודע.
אני לא השתמשתי באפשרויות מורכבות.
רק הדפסה רגילה נטו.
@ek0583232948 אמר בלא נטען לי רשימת אנשי קשר כשאני כותב הודעה חדשה בג'ימייל:
אני מכוון למה שעולה כשמתחילים לכתוב שם או כתובת אימייל
זה לא עולה למרות כמה פעמים ריענון והפעלה מחדש
יש לך נטפרי?
דובר כאן לאחרונה שיש בזה בעיות בנטפרי
@liy770 אמר בVue.js | הגדרת משתנה גלובלי:
(אני צריך משתנה שאני יוכל לגשת אליו מכל קובץ בפרוייקט)
בשביל יש את store
אני מששתמש ב PM2 להפעלת שרת nodejs.
בדרך כלל אחרי עדכון גירסה של שירות בשרת אני מפעיל פקודת pm2 monit כדי לוודא שהכל תקין, בדר"כ לא בוער לי לצאת מזה וה SSH יכול להישאר על מצב זה זמן ממושך.
בחלק מהשירותים אני משתמש ב console.log כדי לתעד דברים שאני לא צריך לשמור בשרת אבל חשוב לי תיעוד זמני (הלוגים השמורים של PM2)
מה שקורה שאם אני על מצב monit ב pm2 ומצטבר הרבה הדפסות זה מקפיץ את ה CPU לרמות גבוהות.
החיבור עצמו ללא console.log שמודפסים אינו צורך כמעט CPU, אבל כל הדפסה מעלה את זה, ובהדפסות רבות זה ממש מקפיץ.
האם יש איזה פיתרון שיכבה את מצב מוניטור בצורה אוטומטית?
או משהו אחר שלא יווצר מצב שהCPU מבוזבז על הלוגים?
ניתן לראות בתמונה עלייה הדרגתית (הקפיצות הגבוהות הן מפעולות שנעשו שדורשות CPU, לא מזה אני מוטרד, אלא מהצריכה המבוזבזת של ה CPU של המוניטור, כאשר כביתי את המוניטור זה ירד באחת לשגרה של כ 10%
ניתן גם עי שירות כמו nodeprint מתקינים אותו על מחשב שמחובר למדפסת וניתן מכל מקום ע"י הענן להדפיס מסמכים למדפסת המבוקשת, ניתן גם לשלוח מסמכים להדפסה באמצעות API
ברכותי ואיחולי על פתיחה מחדש של פורום תכנות.
עדיין לא לגמרי הבנתי את המהלך שנעשה, ר' @dovid מחכים למוצא פיך.
לכתחילה לא הגבתי עד כה בנושא כי סמכתי ש @dovid היקר יחזור ויפתח את זה וכמובן יוביל את הפורום למהלך הנכון לעשות.
אני לא יודע מי צריך את הפורום יותר הוא אנחנו, אבל מה שבטוח שלכולם יש תועלת לאין ערוך מזה.
בנימה אישית לולי הפורום ייתכן שעדיין הייתי תקוע ב PHP וקצת HTML.
ב"ה מכאן למדתי שפות נוספות, פריימוורקים וצורות עבודה, שזה לא רק קניין של מה שלמדתי אלא זה מהלך לפרוץ גבולות ולדעת להגיע למה שצריך.
ברור שהיה אווירת אימייש כשהפורום סגור, ניתן להרגיש יותר חופשי לכתוב שאלות על פרוייקט בצורה פתוחה, ניתן לכתוב בנימה אישית על התמודדות עם שאלות הלכתיות של הונאה, וניתן לכתוב רגשות של שילוב עבודה בתחום עם אורח חיים של אברך ועוד.
@dovid מחכים למוצא פיך מה הבנת שנכון לעשות.
תודה רבה!
עריכה
אני רואה שתוך כדי כתיבת השורות כבר הגבת..
ועל כן אני מברך את הצעד שעשית, ושמח שבחרת שכולם יוכלו להנות מהפוסטים הגנוזים, ואני מאחל להם שיצליחו בכל מעשה ידיהם להתקדם נכון ולהפיק את המירב ממה שהם עסוקים בו.
בס"ד נמשיך כולנו להגיב ולעזור אחד לשני ומעתה ביתר שאת וביתר עוז, וביותר צוות..
@123123123 אמר במדוע אני לא מקבל מיילים???:
מישהו יודע מהי הסיבה?
יש לי השערה שהבנקאי לא קיבל את הכתובת המייל הנכונה, או שמעודכן אצלו מייל לא נכון
@yossiz אמר בubuntu כשרת מקומי:
אתה צריך לכתוב 'my'@'%' עבור משתמש שיכול להתחבר מכל IP, או @<your-ip> עבור משתמש מ-IP מסויים.
כמעט בטוח שזה הבעיה, או לפחות חלק מהבעיה
שהמשתמש הוא לוקאלי בשרת עצמו ולא נגיש מבחוץ
חייבים ליצור משתמש לגישה חיצונית כמו ש @yossiz כתב
@liy770 אמר בשליחת.מייל מחשבון הגימייל ב PHP:
הם מחקו לי את הסיסמא לאפליקציה כעבור משהו כמו חודש...
נשמע מאוד מוזר
אצלי כבר פעיל מ 07/06/2022 ללא בעיות
(פתחתי במיוחד לזה מייל אחר, והגדרתי "שליחה כ" הזיהוי של המייל המבוקש)
קח בחשבון נקודה אחת, בעבר היה ניתן להתחבר בקלות לג'ימייל מספריות SMTP בקלות על ידי שם המשתמש והסיסמא של המייל.
מתאריך 30/05/2022 מסיבות אבטחה גוגל חסמו אפשרות לגשת לחשבון גוגל ע"י SMTP עם הסיסמא של החשבון.
אז ייתכן ואתה מנסה עם הסיסמא הראשית של החשבון ולכן זה נכשל.
הכי קל, אם מוגדר/מגדירים למייל אימות דו שלבי גוגל מאפשר לך להפיק סיסמא לאפליקציה שזה סיסמא שיש לך שליטה לבטל אותה ונראה לי שיש לזה הרשאות מוגבלות, אבל ניתן לשלוח עם זה מיילים ללא בעיות.
אם יש לך בעיה לעשות אימות דו שלבי זה מאוד קשה.
אפשר ע"י יצירת פרוייקט בגוגל קלאוד ולהתחבר ע"י מתן הרשאות מהמייל המבוקש לשליחת מיילים אבל הפרוייקט שאתה פותח לפני בדיקה של גוגל זה מוגדר על מצב טסטים וההרשאה נמשכת עד 7 ימים וכל שבע ימים זה נתקע.
רק עם יש לך חשבון בגוגל וורקס זה יותר קל כי אז ניתן לתת הרשאה פנימית בארגון לשליחת מיילים הפרוייקט של הארגון ושם גם במצב טסטים אין תוקף להרשאה שניתנה.
יש על זה חומר כאן בפורום, חלק מזה בפורום הסגור נראה לי
אשמח לדעת איך אני מוסיף אפשרות של הרשמה לקבלת מיילים מהפורום כאשר עלה פוסט חדש בנושאים נבחרים?
תודה
@dovid אמר בJS ביטוי רגולארי לפיצול כתובת לעמודות רחוב בית/דירה ועיר:
כפי שחגי אמר
אני לא רואה כאן תגובה שלו!?