כיצד אוכל לשאוב מידע על כל וידאו מראש אם הוא פתוח בנטפרי או לא
-
יש לי אתר שבנוי בוורדפרס שיש בו וידאו הרצאה בכל פוסט.
הייתי מעוניין להריץ סקריפט שרץ על כל הפוסטים באתר ובודק כל פוסט אם הוא פתוח בנטפרי ומה חסום (לצורך מחיקה) ומה עדיין לא נבדק.
(דהיינו שהוא יתפוס הוידאו הראשון בכל פוסט ויבדוק אם הוא נתקל בחסימה או לא).
ואם הוא נתקל בחסימה שהוא יתייג את זה באיזשהוא דרך שאוכל למצוא אחר כך את כל התיוגים, בטקסונומיה או תיוג כל שהוא אחר.
עדיף סקריפט שרץ בשעת אמת אבל אפשר להשתמש גם בסקריפט שפועל בהרצה עצמאית בכל פעם.
בקיצור שהסקריפט ירוץ על כל הפוסטים ויתייג לי מה פתוח בנטפרי ומה לא.
תודה מראש -
@משה-בניית-אתרים אתה מבקש יותר מדי בפוסט אחד...
אני אקח את עיקר הבקשה שקשור לפורום נטפרי והשאר אשאיר לך לשיעורי בית
עיקר השאלה, "איך אוכל לזהות סטטוס של וידיאו בנטפרי?"אם יש לך את הכתובת של הוידיאו אפשר לקבל את הסטטוס שלו בנטפרי על ידי שליחת בקשה לכתובת של הוידיאו, במידה וזה פתוח תקבל סטטוס 200. במידה וזה חסום תקבל 418. כדי לקבל פרטים על החסימה אפשר לבדוק את ה-html של התשובה, הדף מכיל iframe והכתובת של ה-iframe מקודד בתוכו פרטים על החסימה.
כמובן שבדיקה זו לא תעבוד אלא אם אתה מבצע אותה ברשת מסוננת של נטפרי.
(דיברו פעם על API לקבל סטטוס של קישור בנטפרי ואם אני זוכר נכון המנהל לא רצה לאפשר את זה. עריכה: התכוונתי לזה) -
האמת שמספיק לי שיריץ את המספר לפי מזהה הוידאו בכל פוסט עם איזה תו מיוחד (#200 למשל) וכל השאר אוכל לעשות לבד לתייג באופן אוטומטי לפי ביטוי מיוחד.
יש לי קוד php לאתר את מזהה הוידאו בכל מקום ולהמר אותו.
עכשיו אני מגדיר שהוא נניח יוחלף ל[מקור]#200 (זה בפני עצמו צריך שיפוץ שהקוד יגיע למצב כזה).
כיצד ניתן להריץ שאילתא בתוך הרשת של נטפרי? דהיינו כיצד להגדיר שהוא יתפוס רק את מזהי הוידאו הקשורים לנטפרי?עריכה: לאחר מכן חשבתי שאולי מספיק לי לקבל רשימה של כל מזהי הוידאו הפתוחים בנטפרי ולהריץ איזה דבר כל שהוא לפי הרשימה הזו בלבד.
במידה ויש רשימה כזו אשמח לנסות ולראות. -
@משה-בניית-אתרים נשמע שלא קראת את התשובה של @yzahn מעליך.. תקרא שוב ביתר עיון
זה לא כזה מסובך -
מ"מ אם יש רשימה יש בידי כבר סקריפט מוכן בשביל להתמודד עם זה, וזה עדיף לי מלנסות לייצר סקריפט חדש. רק נשאר לי לבדוק אם הוא יצליח לעמוד בעומס של רשימה כזו.
-
@משה-בניית-אתרים אתה מדבר על סרטונים מיוטיוב או סתם סרטונים?
-
@chv שיעורי תורה ביוטיוב.
-
@משה-בניית-אתרים אוקיי אם כל הסרטונים הם מיוטיוב, תנסה לפנות לוידאו-טוב, ולבקש מהם רשימה כמו שהזכרת.
אמנם אני מסופק אם אכן יש להם את כל הסרטונים שפתוחים בנטפרי. אם הבנתי נכון זה מה שאמור להיות, השאלה אם זה כך במציאות. -
ואגב, על הצד שהסקריפט הנ"ל לא יוכל לעמוד בעומס של כל הרשימה, אשמח לדעת באיזה דרך תוכל להריץ סקריפט שלא ברמת השרת?
-
@משה-בניית-אתרים איך זה קשור לשרת? יש לך רשימה של מזהי וידאו שבאתר שלך?
תריץ עליהם (בכל מחשב או מה שלא יהיה) הצלבה מול הרשימה השניה (התיאורטית) -
זה נמצא בתוך פוסטים בשרת במסד הנתונים. יש לך דרך להריץ עליהם את השאילתא?
-
@משה-בניית-אתרים אני חושב שיש כאן סוג של שיח חרשים.
אתה צריך להריץ על כל אחד מהכתובות של הסרטונים, בקשה (לדוגמא fetch) ואז פשוט - אם הסרטון פתוח תקבל סטטוס 200, אם סגור תקבל 418. כל מה שחסום על ידי נטפרי מתקבלת שגיאה בקונסול עם המספר 418 (והתיאור blocked by netfree).
הכי פשוט לך לקבל (מהמסד נתונים, איך שאתה אמור לדעת להוציא) את כל הכתובות של סרטוני יוטיוב שנמצאים באתר, להכניס אותם למערך, ולבצע משהו כזה:var videos = ["כתובת 1", "כתובת 2", "וכו"] Promise.all(videos.map(u=>fetch(u))).then(responses => responses.forEach( response => console.log(`${response.url}: ${response.status}`) ));
כדי שזה יעבוד חלק תצטרך (אני משער שכבר יש לך) להכניס CORS (נגיד עם תוסף כגון זה בפיירפוקס).
תוכל לסנן כמובן, שרק אלו שמגיבים בסטטוס 418 יופיעו וכן הלאה. -
@chv
אני גם מתעניין בנושא וכמו שהצעתי כאן
ניסיתי לכתוב לזה סימנייה אך קיבלתי על הכל סטטוס 200 , גם מה שחסום(()=>{ let links = document.querySelectorAll('a'); for (const link of links) { fetch(link.href) .then((response)=>{return response.status}) .then((thestatus)=>{console.log(`הסטטוס הוא ${thestatus}`)}) } })()
-
@ב-ל יש לך בעיה בסיסית בקוד, הוא לא בנוי כמערך (או לפחות לא בצורה שאפשר להתנהל איתו בfetch וresponse) כמו כן לא הבנתי מאיפה מגיע thestatus.
תעשה קוד כזה - בערך - זה אמור לעבוד:
var array = []; var links = document.getElementsByTagName("a"); for(var i=0; i<links.length; i++) { array.push(links[i].href); } Promise.all(array.map(u=>fetch(u))).then(responses => responses.forEach( response => console.log(`${response.url}: ${response.status}`) ))
כמו שכתבתי למעלה - מכאן אתה כבר יכול לסנן את כל התשובות 418 (נגיד במקום console.log וכו', אתה כותב -
if (response.status == "418") { // התראה או יצירת רשימה של הלינקים הבעייתים וכו }))
זה לדוגמא)
צריך לדעת איך להחריג את הפרומיס משגיאות צדדיות - כגון חסימות של חוסמי פרסומות או הגנות מעקב וכו', שיצוד רק את הבקשות שקיבלו תשובות עם סטטוס. (זה חובה להשתמש כאן בפרומיס, כי יש המון תוצאות וצריך אותן במרוכז)
@yzahn אולי יש לך משהו לתרום בנידון. -
@chv אמר בכיצד אוכל לשאוב מידע על כל וידאו מראש אם הוא פתוח בנטפרי או לא:
@ב-ל יש לך בעיה בסיסית בקוד, הוא לא בנוי כמערך (או לפחות לא בצורה שאפשר להתנהל איתו בfetch וresponse) כמו כן לא הבנתי מאיפה מגיע thestatus.
זה לא פורום תכנות, אז לא אאריך אבל הקוד שלו בסדר גמור.
יש בעיה להריץ את הבדיקה בדפדפן כי יש בעיית CORS.
בתוסף לא יהיה הבעיה הזאת. -
@yzahn אמר בכיצד אוכל לשאוב מידע על כל וידאו מראש אם הוא פתוח בנטפרי או לא:
יש בעיה להריץ את הבדיקה בדפדפן כי יש בעיית CORS.
אז למה הוא מביא על הכל סטטוס 200 ?
-
@ב-ל על איזה דף הרצת את הקוד? ייתכן שהקישורים שלהם לא היה בעיית CORS היו באמת פתוחים
-
@yzahn
נכון. התקנתי תוסף שמונע בעיית CORS וזה אכן עובד -
@ב-ל אמר בכיצד אוכל לשאוב מידע על כל וידאו מראש אם הוא פתוח בנטפרי או לא:
נכון. התקנתי תוסף שמונע בעיית CORS וזה אכן עובד
מה התוסף?
-
@משה-בניית-אתרים
זה למשל
https://chrome.google.com/webstore/detail/allow-cors-access-control/lhobafahddgcelffkeicbaginigeejlf/related
ויש עוד הרבה, תחפש בחנות של גוגל