הטענת רב-קו בצורה תיכנותית

HoneyBadger

New member
הטענת רב-קו בצורה תיכנותית

הטענת רב-קו בצורה תיכנותית
אני יודע שזה פחות הדיונים פה אפילו שראיתי פה בעבר כמה פוסטים קשורים.

ההורים שלי אנשים מבוגרים ואני רוצה לבנות להם אפליקציה יותר טקסטואלית ופחות צבעונית לקנות נסיעות ברב קו, רציתי לדעת אם מישהו יודע אם ניתן ואיך ניתן לגשת בצורה תיכנותית למערכת של טעינת הרב קו
 

arseny92

Well-known member
מנהל
לא ניתן*, תשתמש ברב-קו אונליין, או הופ-און

הטענת רב-קו בצורה תיכנותית
אני יודע שזה פחות הדיונים פה אפילו שראיתי פה בעבר כמה פוסטים קשורים.

ההורים שלי אנשים מבוגרים ואני רוצה לבנות להם אפליקציה יותר טקסטואלית ופחות צבעונית לקנות נסיעות ברב קו, רציתי לדעת אם מישהו יודע אם ניתן ואיך ניתן לגשת בצורה תיכנותית למערכת של טעינת הרב קו
לא ניתן*, תשתמש ברב-קו אונליין, או הופ-און
כל גישה מאפליקציית צד ג' אחרת היא לקריאת תוכן שעל הכרטיס בלבד, ולא לשינוי (כתיבה), שגם מצריך דיווחים למסלקה ומערכת גבייה מאמצעי תשלום

*את המפתח (key) הנדרש לכתיבת תוכן, כלומר שימוש בפעולות תקן ISO 7816-4 האלו
WRITE BINARY
UPDATE BINARY
ERASE BINARY
WRITE RECORD
APPEND RECORD
UPDATE RECORD
PUT DATA
DECREASE*
DECREASE MULTIPLE*
INCREASE*
INCREASE MULTIPLE*
VERIFY
INTERNAL AUTHENTICATE
EXTERNAL AUTHENTICATE
GET CHALLENGE
MANAGE CHANNEL
OPEN SECURE SESSION*
CLOSE SECURE SESSION*
מקבלים אך ורק מפתחי אפליקציות מורשות שזכו במכרז להטענות רב-קו
* - ראה בקישור בסיס התקן למטה, פסקה 4.2 ב-PDF

באפשרותך להשתמש בפעולות שנשארו
SELECT APPLICATION*
SELECT FILE
READ RECORD
READ BINARY
GET DATA
לקריאה בלבד של תוכן הכרטיס (כלומר להציג מה יש בו), אלא רק שאפליקציות כאלו כבר קיימות, Cardpeek למשל (בגרסה הזו) או האפליקציות הרב-קו הלא רשמיות שמוצאים בחנות הטלפון

אם אתה עדיין רוצה אפליקציה משלך לקריאה בלבד של הרב-קו, יש לך את בסיס התקן ואת אגדן הנהלים
 

HoneyBadger

New member
תודה

לא ניתן*, תשתמש ברב-קו אונליין, או הופ-און
כל גישה מאפליקציית צד ג' אחרת היא לקריאת תוכן שעל הכרטיס בלבד, ולא לשינוי (כתיבה), שגם מצריך דיווחים למסלקה ומערכת גבייה מאמצעי תשלום

*את המפתח (key) הנדרש לכתיבת תוכן, כלומר שימוש בפעולות תקן ISO 7816-4 האלו
WRITE BINARY
UPDATE BINARY
ERASE BINARY
WRITE RECORD
APPEND RECORD
UPDATE RECORD
PUT DATA
DECREASE*
DECREASE MULTIPLE*
INCREASE*
INCREASE MULTIPLE*
VERIFY
INTERNAL AUTHENTICATE
EXTERNAL AUTHENTICATE
GET CHALLENGE
MANAGE CHANNEL
OPEN SECURE SESSION*
CLOSE SECURE SESSION*
מקבלים אך ורק מפתחי אפליקציות מורשות שזכו במכרז להטענות רב-קו
* - ראה בקישור בסיס התקן למטה, פסקה 4.2 ב-PDF

באפשרותך להשתמש בפעולות שנשארו
SELECT APPLICATION*
SELECT FILE
READ RECORD
READ BINARY
GET DATA
לקריאה בלבד של תוכן הכרטיס (כלומר להציג מה יש בו), אלא רק שאפליקציות כאלו כבר קיימות, Cardpeek למשל (בגרסה הזו) או האפליקציות הרב-קו הלא רשמיות שמוצאים בחנות הטלפון

אם אתה עדיין רוצה אפליקציה משלך לקריאה בלבד של הרב-קו, יש לך את בסיס התקן ואת אגדן הנהלים
תודה
מזה החרא הזה שלשירות בסדר גודל כזה אין API, לא אכפת לי גם שהסליקה תתבצע אצלם.
טוב אבל אין מה לעשות, תודה על התשובה המפורטת.
 

nox120

New member
אין API, אבל אפשרי לכתוב תוכנה שמשתמשת באתר

לא ניתן*, תשתמש ברב-קו אונליין, או הופ-און
כל גישה מאפליקציית צד ג' אחרת היא לקריאת תוכן שעל הכרטיס בלבד, ולא לשינוי (כתיבה), שגם מצריך דיווחים למסלקה ומערכת גבייה מאמצעי תשלום

*את המפתח (key) הנדרש לכתיבת תוכן, כלומר שימוש בפעולות תקן ISO 7816-4 האלו
WRITE BINARY
UPDATE BINARY
ERASE BINARY
WRITE RECORD
APPEND RECORD
UPDATE RECORD
PUT DATA
DECREASE*
DECREASE MULTIPLE*
INCREASE*
INCREASE MULTIPLE*
VERIFY
INTERNAL AUTHENTICATE
EXTERNAL AUTHENTICATE
GET CHALLENGE
MANAGE CHANNEL
OPEN SECURE SESSION*
CLOSE SECURE SESSION*
מקבלים אך ורק מפתחי אפליקציות מורשות שזכו במכרז להטענות רב-קו
* - ראה בקישור בסיס התקן למטה, פסקה 4.2 ב-PDF

באפשרותך להשתמש בפעולות שנשארו
SELECT APPLICATION*
SELECT FILE
READ RECORD
READ BINARY
GET DATA
לקריאה בלבד של תוכן הכרטיס (כלומר להציג מה יש בו), אלא רק שאפליקציות כאלו כבר קיימות, Cardpeek למשל (בגרסה הזו) או האפליקציות הרב-קו הלא רשמיות שמוצאים בחנות הטלפון

אם אתה עדיין רוצה אפליקציה משלך לקריאה בלבד של הרב-קו, יש לך את בסיס התקן ואת אגדן הנהלים
אין API, אבל אפשרי לכתוב תוכנה שמשתמשת באתר
למשל בפייתון 2 או פרל תוך שימוש ב-web-mechanize. או בפייתון 3 או ג'אווה, תוך שימוש ב-selenium. זה אמנם פחות נוח מבחינה תכנותית, ורגיש לשינויים באתר, שקורים לעתים תכופות יותר (וללא הזהרה) מאשר שינויים ב-API, וזה דורש יותר משאבים בהרצה, אבל מבחינת המשתמש אין הבדל גדול.
 
לא יותר פשוט שאתה תטעין להם פעם בחודש?

הטענת רב-קו בצורה תיכנותית
אני יודע שזה פחות הדיונים פה אפילו שראיתי פה בעבר כמה פוסטים קשורים.

ההורים שלי אנשים מבוגרים ואני רוצה לבנות להם אפליקציה יותר טקסטואלית ופחות צבעונית לקנות נסיעות ברב קו, רציתי לדעת אם מישהו יודע אם ניתן ואיך ניתן לגשת בצורה תיכנותית למערכת של טעינת הרב קו
לא יותר פשוט שאתה תטעין להם פעם בחודש?
 

nox120

New member
דוגמה לתכנית שטוענת כרטיס רב קו באופן אוטומטי

הטענת רב-קו בצורה תיכנותית
אני יודע שזה פחות הדיונים פה אפילו שראיתי פה בעבר כמה פוסטים קשורים.

ההורים שלי אנשים מבוגרים ואני רוצה לבנות להם אפליקציה יותר טקסטואלית ופחות צבעונית לקנות נסיעות ברב קו, רציתי לדעת אם מישהו יודע אם ניתן ואיך ניתן לגשת בצורה תיכנותית למערכת של טעינת הרב קו
דוגמה לתכנית שטוענת כרטיס רב קו באופן אוטומטי
תכנית זו טוענת 30 ש"ח לכרטיס המחובר למחשב.
היא מצפה לקובץ עם פרטי המשתמש בשם rk.conf
היא עובדת בלינוקס ומשתמשת בפיירפוקס.
בווינדוס זה עלול להיות קצת יותר מסובך (כמו כל דבר). ההתקנה של אפליקצית רב קו בלינוקס היא מערכתית, בעוד שבווינדוס היא ספציפית לבראוזר, אבל selenium משתמש בפרופיל נקי, לכן אני חושש שיהיה צורך לקנפג אותו יותר כדי שיצליח להתחבר לקורא הכרטיסים.
סביר להניח שאפשר להשתמש בכרום, או בברואזרים אחרים ש-selenium תומך בהם.
קוד:
[main]
username=[EMAIL][email protected][/EMAIL]
password=def
id=123456789

קוד:
#!/usr/bin/python3

import sys,os,time
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.support.ui import WebDriverWait as Wait
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.firefox.options import Options

import configparser
config = configparser.ConfigParser()
config.read("rk.conf")

fp = webdriver.FirefoxProfile()
fp.set_preference("network.protocol-handler.app.ravkav", "/usr/bin/ravkavonline")
fp.set_preference("network.protocol-handler.external.ravkav", True)

handlers=os.path.join(fp.path,"handlers.json")
open(handlers,"w").write('{"defaultHandlersVersion":{"en-US":4},"schemes":{"ravkav":{"action":4}}}')

options = Options()
#options.headless = True
driver = webdriver.Firefox(options=options, firefox_profile = fp)

driver.get("[URL]https://ravkavonline.co.il/he/store/login[/URL]")

username=driver.find_element_by_id('id_email')
password=driver.find_element_by_id('id_password')
button=driver.find_element_by_xpath('//button[text()="התחברות"]')

username.send_keys(config['main']['username'])
password.send_keys(config['main']['password'])
button.click()

driver.implicitly_wait(3)
time.sleep(1)
button=driver.find_element_by_xpath('//a[text()="סרוק כרטיס"]')
button.click()


driver.implicitly_wait(3)
time.sleep(3)
button=driver.find_element_by_xpath('//a[text()="חוזי נסיעה"]')
button.click()


time.sleep(1)
button=driver.find_element_by_xpath('//span[text()="30₪"]')
button.click()

time.sleep(1)
button=driver.find_element_by_xpath('//button[contains(.,"לרכישה")]')
button.click()

id_i=driver.find_element_by_id('id_personalId')
id_i.send_keys(config['main']['id'])

time.sleep(1)
button=driver.find_element_by_xpath('//button[text()="לתשלום"]')
button.click()

sleep(5)
if driver.title=='הכרטיס נטען בהצלחה':
    print("הצלחה")
else:
    print("כשלון")
    sys.exit(1)
 

arseny92

Well-known member
מנהל
למה find_element_by_xpath ? יש לך את כל הקודים בתשובת JSON

דוגמה לתכנית שטוענת כרטיס רב קו באופן אוטומטי
תכנית זו טוענת 30 ש"ח לכרטיס המחובר למחשב.
היא מצפה לקובץ עם פרטי המשתמש בשם rk.conf
היא עובדת בלינוקס ומשתמשת בפיירפוקס.
בווינדוס זה עלול להיות קצת יותר מסובך (כמו כל דבר). ההתקנה של אפליקצית רב קו בלינוקס היא מערכתית, בעוד שבווינדוס היא ספציפית לבראוזר, אבל selenium משתמש בפרופיל נקי, לכן אני חושש שיהיה צורך לקנפג אותו יותר כדי שיצליח להתחבר לקורא הכרטיסים.
סביר להניח שאפשר להשתמש בכרום, או בברואזרים אחרים ש-selenium תומך בהם.
קוד:
[main]
username=[EMAIL][email protected][/EMAIL]
password=def
id=123456789

קוד:
#!/usr/bin/python3

import sys,os,time
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.support.ui import WebDriverWait as Wait
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.firefox.options import Options

import configparser
config = configparser.ConfigParser()
config.read("rk.conf")

fp = webdriver.FirefoxProfile()
fp.set_preference("network.protocol-handler.app.ravkav", "/usr/bin/ravkavonline")
fp.set_preference("network.protocol-handler.external.ravkav", True)

handlers=os.path.join(fp.path,"handlers.json")
open(handlers,"w").write('{"defaultHandlersVersion":{"en-US":4},"schemes":{"ravkav":{"action":4}}}')

options = Options()
#options.headless = True
driver = webdriver.Firefox(options=options, firefox_profile = fp)

driver.get("[URL]https://ravkavonline.co.il/he/store/login[/URL]")

username=driver.find_element_by_id('id_email')
password=driver.find_element_by_id('id_password')
button=driver.find_element_by_xpath('//button[text()="התחברות"]')

username.send_keys(config['main']['username'])
password.send_keys(config['main']['password'])
button.click()

driver.implicitly_wait(3)
time.sleep(1)
button=driver.find_element_by_xpath('//a[text()="סרוק כרטיס"]')
button.click()


driver.implicitly_wait(3)
time.sleep(3)
button=driver.find_element_by_xpath('//a[text()="חוזי נסיעה"]')
button.click()


time.sleep(1)
button=driver.find_element_by_xpath('//span[text()="30₪"]')
button.click()

time.sleep(1)
button=driver.find_element_by_xpath('//button[contains(.,"לרכישה")]')
button.click()

id_i=driver.find_element_by_id('id_personalId')
id_i.send_keys(config['main']['id'])

time.sleep(1)
button=driver.find_element_by_xpath('//button[text()="לתשלום"]')
button.click()

sleep(5)
if driver.title=='הכרטיס נטען בהצלחה':
    print("הצלחה")
else:
    print("כשלון")
    sys.exit(1)
למה find_element_by_xpath ? יש לך את כל הקודים בתשובת JSON
בכל דף
&nbsp
והערה קטנה: גם בוינדוס זה ללא קשר לדפדפן, כל עוד האתר יכול לפתוח את יישום הסריקה והטעינה (ravkav:wss://)
 

nox120

New member
זו רק הוכחת התכנות (proof of concept)

למה find_element_by_xpath ? יש לך את כל הקודים בתשובת JSON
בכל דף
&nbsp
והערה קטנה: גם בוינדוס זה ללא קשר לדפדפן, כל עוד האתר יכול לפתוח את יישום הסריקה והטעינה (ravkav:wss://)
זו רק הוכחת התכנות (proof of concept)
והתכנית משתמשת באתר (כאילו משתמש אנושי מזיז את העכבר ומקיש על המקלדת), אז אין לי גישה לקובץ json.
 

arseny92

Well-known member
מנהל
אם התוכנית יכולה לקבל את תוכן הדף, אז ודאי שאפשר להגיע לJSON

זו רק הוכחת התכנות (proof of concept)
והתכנית משתמשת באתר (כאילו משתמש אנושי מזיז את העכבר ומקיש על המקלדת), אז אין לי גישה לקובץ json.
אם התוכנית יכולה לקבל את תוכן הדף, אז ודאי שאפשר להגיע לJSON
כדי לקבל את כל החוזים המוצעים כפי שהדף נטען, אז פותחים את F12, עוברים ללשונית Network ורואים את כל הקריאות (requests) שצריך לבצע על מנת להגיע לדף id של כל חוזה ספציפי
 

nox120

New member
אני לא מבין מה אתה מציע

אם התוכנית יכולה לקבל את תוכן הדף, אז ודאי שאפשר להגיע לJSON
כדי לקבל את כל החוזים המוצעים כפי שהדף נטען, אז פותחים את F12, עוברים ללשונית Network ורואים את כל הקריאות (requests) שצריך לבצע על מנת להגיע לדף id של כל חוזה ספציפי
אני לא מבין מה אתה מציע
התכנית שלי משתמשת באתר, כאילו היתה בן-אדם. כשאדם רוצה לבחור חוזה, הוא לא פותח developer tools, וקורא את קובץ ה-json. הוא קורא את דף האינטרנט.

אתה מציע במקום להשתמש באתר לשלוח לשרת בקשות מתאימות ולקרוא ישירות לתכנית של ravkavonline עם הפרמטרים כדי שתכתוב לכרטיס? זה אפשרי, אבל זו לא הדרך שבחרתי.

אתה מציע לקצר שלבים ואחרי הכניסה לאתר לפנות ישירות לדף האישור של הטעינה המבוקשת? זו בהחלט אופטימיזציה ראויה, אבל התכנית שלי נועדה להדגים את הרעיון ולא יותר מזה.
 
למעלה