@margalit אין צורך להשתמש ביותר מסימן שאלה אחת...
ו... אין אפשרות להצביע נגד, כי המנהלים ביטלו אותו
yossiz
-
הצבעה נגד?!?!?!?! -
מה ההבדל בין הפצות לינוקס?@nigun
(אני לא בטוח שכל מה שאני כותב הוא מדוייק ב-100 אחוז אבל כך אני רואה את התמונה)לפני שנסביר את החילוקים בין הפצות השונות, בא נדבר על הנושא של "מה זה לינוקס? מה זה GNU? מה תורם ההפצה ל-Linux/GNU?"
מה זה לינוקס?
כפי שמן הסתם כבר ידוע לך, לינוקס הינו ליבת המערכת. הקרנל (Kernel) בלע"ז.
הקרנל לא עושה כלום.
כלומר, כל מציאותו של הקרנל הוא לשרת את ה-userland. ה-userland הינו כל התהליכים שרצים על המחשב. הקרנל אין לו שום תכלית חוץ מלשרת את התהליכים האלו.
לא קיים מחשב "לינוקס" טהור. כי אם אין תהליכים, הקרנל נכנס לפניקה (kernel panic זה המקביל של מסך כחול של ווינדוס)מה זה GNU?
GNU הינו פרוייקט קוד פתוח שתורם חלק גדול של ה-userland של הפצות לינוקס רגילים.
לדוגמא, הספרייה הסטנדרטית של שפת C, מערכת כלים עבור דיבוג וקימפול של כמה שפות, shell סטנדרטי, חבילה שנקראת coreutils שכולל כל הכלים הבסיסיים שמערכת מבוססת UNIX אמורה להכיל... ועוד ועוד...מה תורם ההפצה ל-Linux/GNU?
אבל אם נשלב קרנל של לינוקס עם shell ו-coreutils עדיין לא קיבלנו מערכת שעובדת.
מה חסר? נראה בקטעים הבאים.-
כאשר הקרנל עולה, הוא מחפש בינארי בשם init. הבינארי הזאת יהיה הקוד שירוץ כתהליך מספר 1. לתהליך הזאת יש כמה מטלות חשובות (ע"ע איניט ו-init). ביניהם, להריץ את כל שאר התהליכים החל משירותי מערכת עד ל-shell (גרפי או אחר).
אחד מההבדלים הגדולים בין הפצות הוא איך הם ממשים את תהליך init.
כהיום תהליך ה-init הכי פופולארי הוא systemd, אבל יש המון פולמוסים סביבו, (ביניהם, על איזה חלקים של המערכת אמורה ה-init לשלוט), וזה כמובן משריץ עוד ועוד הפצות...
(מערכת הלינוקס הכי פשוטה, אולי יכולה להיות מערכת שתהליך מספר 1 (PID 1) הינו ה-shell בעצמו, אבל זה לא יהיה מערכת שימושי ביותר) -
נגיד שיש לנו מערכת init ויש לנו coreutils ו-shell, מה עוד חסר?
חסרים כמה וכמה שירותי מערכת נחוצים.
לדוגמא, cron לתזמון משימות, שירות שמזהה כוננים שמגיעים ויוצאים ומעלה אותם בהתאם, שירות שמזהה חיבורי רשת זמינים ופועל בהתאם, שירות שמזהה חומרה שמתחברת או מתנתקת ופועל בהתאם, ועוד...
לפעמים יש כמה מימושים של שירותים אלו. כל הפצה מחליטה איזה מהם הוא הכי מתאים לפי קווי היסוד והייעוד של ההפצה -
כל הפצה מביאה דרך לנהל הוספה והסרה של תוכנות. יש הפצות שמקמפלים בשבילך את התוכנות ומנהלים אוצרות (repositories) של תוכנות מקומפלות. ויש שמנהלים repositories של נוסחאות שאפשר להריץ להרדה וקימפול והתקנה אוטומטית של תוכנות.
כל הפצה מחליטה על -- מערכת לניהול הוספה/הסרה/מציאת ופתרון תלויות (dependencies)
- מדיניות לגבי איזה תוכנות הם מציעים
- מדיניות לגבי מבנה התקייות של התוכנות
- עוד מדיניות, (האם ואיפה התיעוד ימוקם במערכת הקבצים, מבנה קבצי התצורה ואיפה ימוקמו, ועוד ועוד)
-
מה עוד חסר?
- מבנה מערכת הקבצים לא בא למציאות מעצמה. כל הפצה מחליטה על מדיניות שונות בנוגע למבנה מערכת הקבצים.
- מעטפות גרפיות (graphical shells) קיימים רבים כחול הים. כל הפצה מציעה אפס, אחד, או כמה מעטפות גרפיות
עכשיו להפצות השונות שקיימות:
בגדול אפשר לחלק את ההפצות ל-3 קטגוריות- Debian ואביזרייהו
- Redhat ואביזרייהו
- כל השאר
Debian - הוא האבא (והסבא וסבא רבה...) של רוב ההפצות כהיום.
Ubuntu הוא בן של Debian. ההבדליים הם בעיקר ש-Debian הוא יותר מבוסס, ישן, מנוסה, ובסיסי. משא"כ Ubuntu מביאה יותר תוכנות ותכונות מהקופסא, וגירסאות ותכונות יותר מתקדמות אבל פחות מנוסים ומבוססים. אבל זה בנוי על הליבה של Debian.Redhat - הוא השם הגדול השני בתחום, זה כולל Fedora ו-Centos ג"כ. ועוד בנים ובני בנים.
כל השאר - כולל הפצות שלא מבוססות על אף אחד מהנ"ל. כולל slackware, arch, ועוד.
אם הייתי רוצה לכתוב את כל ההבדלים בין ההפצות, יכלה הזמן והם לא יכלו. אבל בגדול אפשר לחלק את ההבדלים לכמה קטגוריות.
-
ההבדלים בין שלוש ההפצות הראשיות שהזכרתי, הם ההבדלים הכי גדולים. הם מתבטאים כמעט בכל התחומים שהזכרתי בקטע של "מה תורמת ההפצה?". כל הפצה מביאה מדיניות שונה בנוגע לכל תחומים אלו.
- מתחת לזה יש תתי הפצות שבנויות על אחד מההפצות הראשיות אבל יש להם מחלוקת אידיאילוגית בנוגע לאחד מהדברים הבסיסיים. לדוגמה הם מבוססים על Debian אבל הם אוחזים ש-systemd לא טוב.
-
יש הפצות שבנויים לגמרי על הפצה קיימת אבל הם מותאמים לצורך ספציפי או לאוכלוסיה ספציפית.
-
יש כמה הפצות שהליבה שלהם בנוי על אחד מההפצות הראשיות, אבל הם מביאים סביבה גראפית יותר טובה/נוחה/יפה לדעתם.
כל זה בלי לדבר על מערכות כמו אנדרויד ו-chromeos שלקחו רק את הקרנל וכל השאר שונה הרבה ממערכת לינוקס רגילה. ובלי לדבר מערכות אחרות מבוססי UNIX אבל עם קרנל שונה.
-
-
ספריית Sequelize: איך למנוע שליחת שדות מסויימות לצד לקוחתיאור הבעיה
על פי רוב בממשקי API, האובייקטים שה-API שולח משקפים במידה רבה את המבנה של ה-DB. עד כדי כך, שלרוב התשובה של ה-API הוא פשוט ייצוג JSON של שורות ב-DB.
מתכנתים עצלנים כמו רוב עמך (כולל אני) בד"כ פשוט עונים לבקשות API עם תבנית זו:- שאילתת DB לקבל את הישויות הרלוונטיות
- הרצת לוגיקה על היישויות, כמו בדיקת הרשאות, או עדכון נתונים וכו'
- סיריאליזציה של ישות ה-DB שרלוונטי לתשובה ל-JSON, ושליחה לקליינט
הבעיה היא שקורה הרבה שהשדות שנצרכים עבור שלב 2 שונים מהשדות שרוצים לשלוח בשלב 3
למשל בבקשת login בד"כ שולפים שורה שמייצגת משתמש, ועבור שלב 2 רוצים לבדוק שהסיסמה נכונה, ולכן שולפים את השדה שמייצג את ההאש של הסיסמה, אבל בשלב 3 בד"כ לא רוצים לשלוח את זה חזרה לקליינט
עוד דוגמה: אפליקציה ששומרת מפתח API של המשתמש כדי להריץ עבורו פעולות מול צד שלישי, רוצה לשלוף את המידע הזה מה-DB עבור שלב 2 כדי לטפל בבקשות שונות, אבל לא רוצה לשלוח את זה חזרה לקליינט
וכהנה רבות
מצו"ב קוד קצר לטיפול נוח בנושא זה עבור משתמשי Sequelize
הסבר על הפתרון
בספריית Sequelize, כאשר הופכים מודל ל-JSON, מנוע JS משתמש מתחת למכסה בפונקציית
Sequelize.Model.prototype.toJSON
הרעיון הוא שנוסיף שדה סטטית להגדרת המודלים שלנו שמכיל מערך של שדות שצריך תמיד להשמיט מהסיריאליזציה, ונכתובtoJSON
מותאם אישית שלנו שיכבד רשימה זו
כדי שזה יעבוד גם על מודלים מקוננים, נקרא לפונקצייה זו בצורה ריקורסיבית על מודלים מקונניםהנה הקוד
// Override the builtin `toJSON` method to allow hiding certain fields from the client // To hide a field, add it to the `hidden` array on the model's prototype // We recursively call `toJSON` on all included models Sequelize.Model.prototype.toJSON = function () { const includes = this._options.includeNames ?? []; const hiddenKeys = this.hidden ?? []; const values = Object.assign({}, this.get()); for (const hiddenKey of hiddenKeys) { delete values[hiddenKey]; } for (const include of includes) { if (Array.isArray(values[include])) { values[include] = values[include].map((value) => value.toJSON()); } else if (typeof values[include].toJSON === 'function') { values[include] = values[include].toJSON(); } } return values; };
והנה הגדרת מודל לדוגמה:
const User = sequelize.define( 'User', { firstName: { type: DataTypes.STRING, allowNull: false, }, lastName: { type: DataTypes.STRING, }, passwordHash: { type: DataTypes.STRING, } }); User.prototype.hidden = ['passwordHash']
או אם אתה מעדיף קלאסים:
class User extends Model { static hidden = ['passwordHash'] } User.init( { firstName: { type: DataTypes.STRING, allowNull: false, }, lastName: { type: DataTypes.STRING, }, passwordHash: { type: DataTypes.STRING, } }, { sequelize, modelName: 'User', }, );
נ.ב. הקוד נכתב עבור sequelize v6. אני משתמש בשדה פנימית של
Model
(ה-_options.includeNames
). אין הבטחה שהקוד ימשיך לעבוד בגירסאות הבאות של sequelizeעוד הערה:
אני לא חושב שקוד זה מספיק טוב לאפליקציה רצינית
נראה לי שאפליקציה רצינית אמורה להפריד בין הייצוג הפנימי לאובייקטים החיצוניים שנשלחים לקליינט, ולהשתמש בשכבה שיודע להמיר בין אובייקטים פנימיים לאובקטים "חיצוניים"
בפרוייקט אחד שלי השתמשתי ב-https://github.com/typestack/class-transformer לצורך זה -
שפת תכנות GOlang@לעזור-לכולם לא כתבת באיזה רמה אתה כותב ב-php ו-js, ומה רצית להשיג מלימוד גו.
המלצתי הוא להשקיע בכתיבה מקצועית יותר בשפות שאתה כבר כותב במקום ללמוד שפה חדשה.
במקרים מסויימים יכול להיות באמת יתרונות לגו על פני js ו-php. למשל עיבודים כבדים או עיבוד מקביל של הרבה נתונים.
שאלת על ביקוש: אז יש יותר ביקוש למתכנת טוב מאשר למתכנת שמכיר הרבה שפות. -
עזרה| תקשור בapi בשפת הphp לפלטפורמת nodebb@mgm-ivr זה לא אמור להיות דבר קל... אז לא להיות מופתע שלא הצלחת.
כמו בכל בעיית תכנות (או כללית) הא' של הא' זה לפצל את הבעיה לחתיכות קטנות יותר ולפתור אותם בנפרד.
לשם כך, נוריד רגע את השפה מהסיפור מכיון שזה לא כל כך משנה. התשובה שלי לא יהיה ספציפית ל-PHP אלא לכל שפה. אם יש לך שאלה ספציפית בנוגע למימוש ב-PHP תשאל שוב אחרי שהבנת את העקרון הכללי.
טוב, עכשיו נקדים ונאמר א) התיעוד שלהם לוקה קצת בחסר... ב) לפי התיעוד שלהם אין שום API עבור התחברות למשתמש שלך על ידי שליחת שם משתמש וסיסמה.
(ואגב, הם מודים בפה מלא שה-API לא נוצר במחשבה תחילה עבור שימוש כ-API כללי, בעיקר זה נוצר עבור תקשורת של הפרונט-אנד עם הבק-אנד והדבר די ניכר.)אז איך עושים בקשות API עבור המשתמש שלך?
בתיעוד יש שתי אופציות:- להשתמש בקוקי בתוקף שלקחת מהדפדפן. השם של הקוקי שאתה צריך הוא
express.sid
.
מה שלא כתוב בתיעוד הוא שאם תשתשמש בקוקי תצטרך גם csrf token... - או אפשר ליצור טוקן שיאמת אותך. הטוקן הזה מייצרים בפאנל הניהול תחת settings > API Access ואז לוקחים את הטוקן ומכניסים אותו בהידר
Authorization
אחרי המילהbearer
.
למעשה, אפשר לעשות עוד משהו שלא כתוב בתיעוד וזה לשלוח בקשת לוגין עם הפרמטרים הנכונים ולקבל חזרה את הקוקי הנצרך.
(אני לא מאריך בכל פרט ופרט, אם משהו לא ברור תשאל. (אבל בבקשה שאלות ממוקדות ומפורטות))
- להשתמש בקוקי בתוקף שלקחת מהדפדפן. השם של הקוקי שאתה צריך הוא
-
בירור | עבודה בתחום התכנותאני רוצה להוסיף עוד נקודה:
מישהו שאל אדם גדול (אני לא זוכר את השם) שיש לו בת (או בן?) מבוגר/ת ואומרים לו שיש יותר בני זוג פוטנציאליים (שמתאימים להדבר הספציפי שהוא מחפש) באמריקה, האם להתחיל לחפש בן/בת זוג באמריקה?
האדם גדול הנ"ל שאל אותו "כמה בני זוג הבת שלך צריכה? לא מספיק אחד? אז מה צריך את המאות הנוספות שיש במקום אחר?"
המסר ברור.
נניח שאין הרבה משרות מתאימות בשוק. אבל אתה צריך רק משרה אחת, לא?(כמובן שהדברים הם לצנינים בצידי אלה שדוגלים בסטטיסטיקה... אבל המציאות מוכיחה אחרת, לא לחכמים הלחם)
-
תכנות | איך להתחיל?@למה אני קורא את שאלותיך (משאלותיך...) ובאמת לא מבין מה אתה מבקש.
האם תוכל בשורה אחת להביע שאלה ענינית (ולא משאלה...)?הבנתי שאתה רוצה "להיות מתכנת". טוב. מה - אם כן - מונע ממך מ"להיות מתכנת"?
אתה לא יודע שפת תכנות? תלמד שפת תכנות. איזה? פייתון, JS, #C... איזה מהם שתמצא מדריך טוב בשפה שאתה מבין ושמתאים לאופי שלך.
אתה לא יודע איך מחשב עובד? לא צריך לדעת איך מחשב עובד להיות מתכנת. יש מספר מבייש לגמרי של מתכנתים שלא מבינים איך מחשבים עובדים...
אתה רוצה להבין איך מחשב עובד? שוב, מה מונע ממך מלקחת מדריך בשפה שאתה מבין ושמתאים לאופי שלך ולהתחיל ללמוד?
אלא מאי, אתה מבקש מראה מקומות למדריכים? אבל זה לא מה שביקשת...
-
הרצת בדיקת מהירות אינטרנט בלופזה אמור לעבוד:
let runCount = 0; const interval = 1000 * 60 * 30; // 30 min const results = []; function runTest () { $('.start-text')[0].click(); } function getResults () { const res = {}; ['ping-speed', 'upload-speed', 'download-speed'].forEach((sel) => { res[sel] = parseFloat($(`.${sel}`)[0].innerHTML) }); results.push(res); return res; } function getAverage (field) { return results.map(res => res[field]).reduce((p, c) => p + c, 0) / runCount; } function printStats () { console.log(` ========================= RUN COUNT: ${runCount} Average: PING: ${getAverage('ping-speed')} DOWNLOAD: ${getAverage('download-speed')} UPLOAD: ${getAverage('upload-speed')} ========================= `); } function loop () { if (runCount) { getResults(); printStats(); } runTest(); runCount++; } loop(); setInterval(loop, interval);
לך לאתר speedtest.net ותדביק את זה בקונסול. כל
חמש דקותחצי שעה הוא יריץ מחדש את הטסט וידפיס את הממוצע העדכני.
ייתכן שאם הטאב לא בפוקוס הסקריפט יפסיק לעבוד, אני לא יודע.
בכל שלב אפשר לכתוב בקונסול את ה"פקודה"results
ולקבל את רשימת התוצאות המלאה.@מעלה-ומוריד אמר בהרצת בדיקת מהירות אינטרנט בלופ:
שאלתי ובקשתי אם יש מי שמוכן לכתוב או לשדך אותי למדריך לJS הנצרך.
אני מאמין שלא מדובר במשהו ארוך או מורכב, אני טועה?לא יודע. תחליט בעצמך אם 43 שורות עונה להגדרה של ארוך או מורכב.
-
עזרה - הכנסת ערך לתיבת טקסט c#@נ-נח אמר בעזרה - הכנסת ערך לתיבת טקסט c#:
@dovid תודה רבה! עובד מצוין
באמת מגיע לדוד תודה רבה. אבל לא בגלל שעכשיו הקוד שלך עובד מצויין. כמו שאם תקבל רכב לא תגיד תודה רבה עכשיו יש לי איפה לאכסן בקבוקי קולה. דוד נתן לך שיעור שאמור ללוות אותך במשך כל ימיך כמתכנת.
אל תחפש פתרונות. תחפש להבין מה הבעיה. הפתרון תגיע מאליה אם רק תבין את הבעיה לאשורה -
היכר עיצובי לפורום האקסלוסיבי@shaya אמר בהיכר עיצובי לפורום האקסלוסיבי:
מה דעתכם על זה?
אני מרשה לעצמי להציג את שעיה מכיון שהוא כנראה מתבייש להציג את עצמו... מקווים שהוא יתחיל לתרום ולא רק לקרוא הודעות ולהצביע...
מדובר במפתח המוכשר שפיתח את האתר השימושי והמרהיב ביופיו: https://koshercode.netlify.app.
ואגב, מי שיש לו מה לתרום לאתר הנ"ל מוזמן לתרום, סרטונים או אתרי הדרכה:
https://github.com/shayaulman/kosher-code -
יש קישור חדש לשקלול מנדטים מתוצאות הבחירות? -
💡 סינון תצוגת בקשות רשת בכלי הפיתוח של כרוםדבר שתמיד ידעתי שקיים, רק שתמיד דחיתי את השימוש בו כי לא ידעתי את התחביר והייתי עצל מדי ללמוד אותו... היום התוודעתי לזה שגוגל מתחשבים גם בעצלנים כמוני וזה קל מאוד.
פשוט לוחצים ctrl+space בתוך תיבת הטקסט (קיצור המקשים המוכר מעורכי טקסט אחרים) ומקבלים רשימה של פרמטרים שאפשר לסנן על פיהם, בוחרים פרמטר, ולוחצים שוב ctrl+space, ומקבלים כל הערכים האפשריים, לוחצים חץ למטה ומקבלים כבר תצוגה מקדימה של התוצאה של הסינון, לוחצים אנטר לקבוע.
שימושי לתומכי נטפרי... (מן הסתם זה היה ידוע להם מכבר...)
-
לימוד רגי'סטרי@aknvtchtk פעם לפני שנים קראתי חלקים גדולים של ספר באנגלית על הרג'יסטרי. אבל לא התרשמתי במיוחד מהספר ולא נראה לי שזו הדרך "ללמוד" את הנושא.
בגדול, יש רק כמה הקדמות קצרות על הרג'יסטרי בכללות, ובכך הקפת את כל מה שיש לדעת על הרג'יסטרי.
אח"כ זה האחריות של כל תוכנה או רכיב ווינדוס שמשתמשת בו להחליט איך להשתמש.
"לימוד הרג'יסטרי" אם כן הוא לימוד של כל הרכיבים שמשתמשים בו.אני לא מבטיח, אבל אולי אני אנסה לסכם כאן בקצרה כמה דברים בסיסיים על הרג'יסטרי בכללות, והרכיבים העקריים שמשתמשים בו.
-
מגניב לגמרי - דף הבית מבית היוצר zvizviיש פתרון על ידי הגדרה:
(או אפשר להגיע להגדרה מכאן:
chrome://settings/content/siteDetails?site=https%3A%2F%2Fxn----2hcef0a0dvc.xn--9dbq2a
)ושם לדפדף עד הסוף ולשנות את ההגדרה: "תוכן לא בטוח" ל-"זה בסדר"
נ. ב. אין שום סיכון בשינוי ההגדרה הנ"ל -
- כי זו הגדרה פר אתר
- כי אין סיכון
-
⚠ אל תשאירו RDP פתוח בלי הגנה!אם אתה אחראי על מחשב ווינדוס,
- מווינדוס 7 ומטה, דהיינו: 7 vista או XP, ו-server 2008 ומטה
- ו-RDP פתוח לאינטרנט (דהיינו שזה מופעל וזה לא יושב אחורי NAT או חומת אש)
- ו..ווינדוס לא מעודכן
קרוב לוודאי שבעתיד הקרוב מישהו יפרוץ לתוך המחשב שלך
(נמצאה חולשה ב-RDP בגירסאות אלו של ווינדוס שנותן לפורצים להיכנס בלי סיסמא)אם זה לא מפריע לך, תמשיך הלאה...
אם זה מפריע לך,- א. תתקין עידכונים (תבדוק פה למציאת העדכון המתאים למערכת הפעלה שלך)
- ב. מומלץ לא להשאיר RDP פתוח לאניטרנט הרחב, (בכל מערכת הפעלה, גם 8 ו-10), אם חייבים לאפשר חיבור מחוץ לרשת המקומי, תעשו VPN.
הבהרה: אם לא הבנת במה מדובר, מירב הסיכויים שזה לא נוגע לך. מדובר בשירות שולחן עבודה מרחוק שמובנה בתוך ווינדוס. אם אתה משתמש ביתי, רוב הסיכויים שא. זה לא מופעל, וב. גם אם זה מופעל, זה לא חשוף לאינטרנט הרחב, אלא לרשת המקומי בלבד.
-
שיתוף: 🔖 סימניה להורדת תוסף כרוםלא יודע אם זה יעזור למישהו, אבל אם רוצים להתקין תוספים שלא מהחנות, (חוץ מן האפשרות הידועה לגרור את התוסף לעמוד התוספים) אפשר להגדיר policy על ידי הפקודה הבאה (להריץ כמנהל):
reg add HKLM\Software\Policies\Google\Chrome\ExtensionInstallSources /v 1 /t REG_SZ /d "https://softwares.center/*"
זה יאשר התקנת תוספים מאתר https://softwares.center
כדי להוסיף עוד אתרים, מריצים שוב עם עוד אתר אבל במקום/v 1
כותבים/v 2
וכן הלאה.
(חייבים לאשר גם את האתר המפנה וגם את האתר של התוסף עצמו)משום מה, זה לא עובד עבור https://update.googleapis.com + .https://zvizvi.gitlab.io/crx-download/
(ו... כן, אם תעשה את זה תקבל הודעה מכרום שהוא מנוהל על ידי הארגון שלך)
-
שינוי סיסמה בבנק הדואר - יומן הרפתקאה@clickone כתב בשינוי סיסמה בבנק הדואר - יומן הרפתקאה:
המנהל סיסמאות (המובנה בכרום לפחות) ע"י לחיצה כפולה והוספת תו מספרי נוסף
השתמשתי במחולל סיסמאות של מנהל סיסמאות אחר, במובנה בכרום אין אפשרות להגדיר כללים עבור סיסמאות חדשות
אבל תודה על הטיפ, לא ידעתי שאפשר לערוך את הסיסמה המחוללת של כרום. (לא צריך קליק כפול, מספיק clickone ) -
מותר לבקש כאן לשלוח לי דברים שחסומים בנטפרי?@מלכי-ויס חוץ מהנושא הנ"ל, יש בעיה עקרונית בנושא כזה בפורום, כי נושא שאתה מעלה בפורום צריך להיות על פי רוב משהו עם עניין כלשהו לשאר הציבור ולא עזרה פרטית (חוץ ממקרים חריגים)
אחרת לא יהיה סיבה כלל לאנשים לבקר פה -
עזרה | ייבוא נתונים מנדרים פלוס לאקסל@יעקב-ישראל
הייבוא של דף אינטרנט באקסל עובד רק אם הנתונים הם בצורה של טבלה. בנדרים הם לא בטבלה.
חוץ מזה כנראה שזה לא עובד עם דפים דינאמיים שמאכלסים את הנתונים ב-JS.אם יש לך אקסל מגירסה 2016 ומעלה יש פתרון מובנה למשיכת נתוני JSON מ-API בצורת power query.
הדף שהבאת מקבל את הנתונים בפורמט JSON מאת הכתובת:
https://www.matara.pro/nedarimplus/V6/MatchPlus.aspx?Action=SearchMatrim&Name=&MosadId=7002590(יש בעיה במקור זה שזה לא נותן יותר מ-200 הרשומות ראשונות, אני משאיר לך את השיעורי בית של מציאת מקור מתאים למידע, אבל בהנחה שזו הכתובת הנכונה למידע -)
הוראות
א. תפתח את מסך power query:
(אצלי זה באנגלית, אני מקוה שזה לא קשה מדי לתרגם את זה לגירסת העברית)ב. תפתח את העורך המתקדם:
ג. תכניס קוד זה:
let Source = Json.Document(Web.Contents("https://www.matara.pro/nedarimplus/V6/MatchPlus.aspx?Action=SearchMatrim&Name=&MosadId=7002590")), #"Converted to Table" = Table.FromRecords(Source) in #"Converted to Table"
ד. תלחץ אישור. בחלון הראשי תקבל תצוגה מקדימה של הדאטה, תוודא שזה בסדר. תלחץ על סגירה וטעינה. זהו.
התוצאה:
ומה שהכי מגניב, שזה מתעדכן כל 60 דקות!
לא הכרתי את התכונה הזאת של אקסל כלל!