בירור | API קול הלשון
-
@מוט-0 כתב בבירור | API קול הלשון:
@MGM-IVR דווקא הבנתי משם שיש, אבל מורכב לשימוש.
תוכל להביא קישור לפוסט שהבנת ממנו?
-
זה הapi שלהם לחיפוש למשל...
לא בעיה להוציא מהאתר חלק, השאלה היא api של מה אתה צריך?
const search_text = "הרב"; const headers = { 'Referer': 'https://www2.kolhalashon.com/', }; fetch(`https://www2.kolhalashon.com:444/api/Search/WebSite_GetSearchItems/${encodeURIComponent(search_text)}/-1/1/4`, { headers }) .then(response => response.text()) .then(data => console.log(data));
-
זה הapi שלהם לחיפוש למשל...
לא בעיה להוציא מהאתר חלק, השאלה היא api של מה אתה צריך?
const search_text = "הרב"; const headers = { 'Referer': 'https://www2.kolhalashon.com/', }; fetch(`https://www2.kolhalashon.com:444/api/Search/WebSite_GetSearchItems/${encodeURIComponent(search_text)}/-1/1/4`, { headers }) .then(response => response.text()) .then(data => console.log(data));
-
@MGM-IVR תודה. אני מעוניין לשלוח בקשה עם שם הרב, ולקבל את המזהה שמופיע ב-URL.
הקוד שכתבת עובד רק כשאני טוען אותו בדף של האתר, מכרטיסיות אחרות זה כותב שאין לך זכויות משתמש. -
@MGM-IVR תודה. אני מעוניין לשלוח בקשה עם שם הרב, ולקבל את המזהה שמופיע ב-URL.
הקוד שכתבת עובד רק כשאני טוען אותו בדף של האתר, מכרטיסיות אחרות זה כותב שאין לך זכויות משתמש. -
@מוט-0 תצטרך לשלוח את הבקשות דרך שרת מתווך, שיכול להיות גם קובץ JS או פייתון קטן שרץ במחשב שלך.
@צדיק-תמים לא הבנתי, קובץ js = שרת?
-
@צדיק-תמים לא הבנתי, קובץ js = שרת?
-
@צדיק-תמים הרצתי דרך nodejs עדיין היה חסום, התכוונת להוסיף נתונים בשליחה? אם כן, איך עושים את זה?
-
@צדיק-תמים הרצתי דרך nodejs עדיין היה חסום, התכוונת להוסיף נתונים בשליחה? אם כן, איך עושים את זה?
@מוט-0 כתב בבירור | API קול הלשון:
@צדיק-תמים הרצתי דרך nodejs עדיין היה חסום, התכוונת להוסיף נתונים בשליחה? אם כן, איך עושים את זה?
לא הבנתי מה בדיוק אתה רוצה לעשות?
-
@צדיק-תמים הרצתי דרך nodejs עדיין היה חסום, התכוונת להוסיף נתונים בשליחה? אם כן, איך עושים את זה?
-
@מוט-0 כן. נסה להגדיר את הכותרות Referer, User-Agent, Accept
בקיצור לחקות באופן מלא את הבקשה שהדפדפן שולח כשאתה משתמש באתר@צדיק-תמים אשמח לפירוט יותר נרחב על העניין (בדיוק התחלתי להתעניין בו לאחרונה), או להפניה לחומר בנושא.
-
@צדיק-תמים אשמח לפירוט יותר נרחב על העניין (בדיוק התחלתי להתעניין בו לאחרונה), או להפניה לחומר בנושא.
@מוט-0 אני לא יודע מה הידע שלך באופן כללי.
אבל הAPI של קול הלשון חוסם בקשות שאינם עם הHeader:
Referer: https://www2.kolhalashon.com
כלומר נשלחו מתוך האתר שלהם. ואי אפשר לשנות את ההידר הזה בבקשות שנשלחות בJS מהדפדפן. כן אפשר עם תוספים שונים, די בקלות.
לכן אני מציע לשלוח את הבקשות דרך Node.js שם אין מגבלה כזאת, ושם תוכל להגדיר את הheader כרצונך ולחקות באופן מלא את הבקשה שהאתר של קול הלשון שולח, דוגמה בnodejs עם ספריית axios:const axios = require('axios'); let data = JSON.stringify({ "RavID": 1297, "FromRow": 0, "NumOfRows": 24, "OrderBy": 7, "PrefferedLanguage": 0, "FiltersArray": [] }); let config = { method: 'post', maxBodyLength: Infinity, url: 'https://www2.kolhalashon.com:444/api/Search/WebSite_GetRavShiurim/', headers: { 'Content-Type': 'application/json', 'Referer': 'https://www2.kolhalashon.com/' }, data : data }; axios.request(config) .then((response) => { console.log(JSON.stringify(response.data)); }) .catch((error) => { console.log(error); });
וכדי שתוכל לשלוח בקשות מהדפדפן, תוכל להקים שרת אקספרס קטנטנן שישלח עבורך את הבקשות - משהו כזה:
const axios = require('axios') const express = require('express') const app = express() app.use(express.json()) app.use((req, res, next) => { res.header('Access-Control-Allow-Origin', '*') res.header('Access-Control-Allow-Headers', '*') next() }) app.post('/:url(*)', async (req, res) => { try { const { data } = await axios.post(req.params.url, req.body, { headers: { 'Content-Type': 'application/json', Referer: 'https://www2.kolhalashon.com/' } } ) res.send(data) } catch (error) { res.status(500).send(error) } }) app.listen(3001, () => { console.log('server started on port 3000') })
ואז תוכל לשלוח את הבקשות בדפדפן:
fetch('http://localhost:3001/https://www2.kolhalashon.com:444/api/Search/WebSite_GetRavShiurim', { method: 'POST', headers: { 'Content-Type': 'application/json', }, body: JSON.stringify({ RavID: 1297, FromRow: 0, NumOfRows: 24, OrderBy: 7, PrefferedLanguage: 0, FiltersArray: [] }) } ) .then(response => response.text()) .then(result => console.log(result)) .catch(error => console.log('error', error))
-
@מוט-0 אני לא יודע מה הידע שלך באופן כללי.
אבל הAPI של קול הלשון חוסם בקשות שאינם עם הHeader:
Referer: https://www2.kolhalashon.com
כלומר נשלחו מתוך האתר שלהם. ואי אפשר לשנות את ההידר הזה בבקשות שנשלחות בJS מהדפדפן. כן אפשר עם תוספים שונים, די בקלות.
לכן אני מציע לשלוח את הבקשות דרך Node.js שם אין מגבלה כזאת, ושם תוכל להגדיר את הheader כרצונך ולחקות באופן מלא את הבקשה שהאתר של קול הלשון שולח, דוגמה בnodejs עם ספריית axios:const axios = require('axios'); let data = JSON.stringify({ "RavID": 1297, "FromRow": 0, "NumOfRows": 24, "OrderBy": 7, "PrefferedLanguage": 0, "FiltersArray": [] }); let config = { method: 'post', maxBodyLength: Infinity, url: 'https://www2.kolhalashon.com:444/api/Search/WebSite_GetRavShiurim/', headers: { 'Content-Type': 'application/json', 'Referer': 'https://www2.kolhalashon.com/' }, data : data }; axios.request(config) .then((response) => { console.log(JSON.stringify(response.data)); }) .catch((error) => { console.log(error); });
וכדי שתוכל לשלוח בקשות מהדפדפן, תוכל להקים שרת אקספרס קטנטנן שישלח עבורך את הבקשות - משהו כזה:
const axios = require('axios') const express = require('express') const app = express() app.use(express.json()) app.use((req, res, next) => { res.header('Access-Control-Allow-Origin', '*') res.header('Access-Control-Allow-Headers', '*') next() }) app.post('/:url(*)', async (req, res) => { try { const { data } = await axios.post(req.params.url, req.body, { headers: { 'Content-Type': 'application/json', Referer: 'https://www2.kolhalashon.com/' } } ) res.send(data) } catch (error) { res.status(500).send(error) } }) app.listen(3001, () => { console.log('server started on port 3000') })
ואז תוכל לשלוח את הבקשות בדפדפן:
fetch('http://localhost:3001/https://www2.kolhalashon.com:444/api/Search/WebSite_GetRavShiurim', { method: 'POST', headers: { 'Content-Type': 'application/json', }, body: JSON.stringify({ RavID: 1297, FromRow: 0, NumOfRows: 24, OrderBy: 7, PrefferedLanguage: 0, FiltersArray: [] }) } ) .then(response => response.text()) .then(result => console.log(result)) .catch(error => console.log('error', error))
@צדיק-תמים לצערי עדיין איני יכול ללייק, אז תודה!
-
@צדיק-תמים לצערי עדיין איני יכול ללייק, אז תודה!
@צדיק-תמים ואם אפשר המלצה על מדריך ללימוד Nodejs (או שעדיף לפתוח נושא (אולי כבר קיים))
-
@צדיק-תמים ואם אפשר המלצה על מדריך ללימוד Nodejs (או שעדיף לפתוח נושא (אולי כבר קיים))