• דף הבית
  • קטגוריות
  • פוסטים אחרונים
  • משתמשים
  • חיפוש
  • חוקי הפורום
כיווץ
תחומים

תחומים - פורום חרדי מקצועי

עדכונים שוטפים מהפורום - קוד פתוח

מתוזמן נעוץ נעול הועבר ארכיון code613m
26 פוסטים 5 כותבים 1.2k צפיות
    • מהישן לחדש
    • מהחדש לישן
    • הכי הרבה הצבעות
תגובה
  • תגובה כנושא
התחברו כדי לפרסם תגובה
נושא זה נמחק. רק משתמשים עם הרשאות מתאימות יוכלו לצפות בו.
  • רחמיםר מנותק
    רחמיםר מנותק
    רחמים
    כתב ב נערך לאחרונה על ידי
    #1

    מצורף קוד שכתבתי כדי לקבל עדכונים שוטפים מהפורום, הקוד עובד עם RSS, פשוט תצרו פרוייקט חדש עם פקד Timer2 ופקד 'NotifyIcon1' וכמו שתראו כבר בקוד.

    Dim bytes As Byte() = {}
        Dim DownloadThread As Threading.Thread
        Dim href As String
    
        Private Sub Timer2_Tick(sender As System.Object, e As System.EventArgs) Handles Timer2.Tick
            Try
                Dim len As Integer = bytes.Length
                DownloadThread = New Threading.Thread(AddressOf DownloadThreadStart)
                DownloadThread.Start()
                'מנסה להוריד נתונים עד 10 שניות
                For I = 0 To 10
                    Threading.Thread.Sleep(1000)
                    If DownloadThread.IsAlive = False Then
                        Exit For
                    End If
                Next
                'יוצא אם עד אחר 10 שניות לא הצליח להוריד
                If DownloadThread.IsAlive Then
                    DownloadThread.Abort()
                    Exit Sub
                End If
                If len <> bytes.Length Then
                    len = bytes.Length
                    Dim DS As New DataSet
                    DS.ReadXml(New MemoryStream(bytes))
                    Dim SB As New StringBuilder
                    SB.AppendLine("המחבר: " & DS.Tables(2).Rows(1).Item(0).ToString)
                    SB.AppendLine("נושא: " & DS.Tables(4).Rows(0).Item(1).ToString)
                    Dim msg As String = DS.Tables(6).Rows(0).Item(1).ToString
                    If msg.Length > 100 Then
                        msg = Mid(msg, 1, 100) & " ..."
                    End If
                    SB.AppendLine("תוכן ההודעה: " & msg)
                    href = DS.Tables(3).Rows(0).Item(3).ToString
                    SB.AppendLine("לחץ כאן למעבר להודעה החדשה")
                    NotifyIcon1.ShowBalloonTip(5555, "הודעה חדשה בפורום", SB.ToString, ToolTipIcon.Info)
                End If
            Catch ex As Exception
                MsgBox(ex.Message, MsgBoxStyle.Exclamation +
                                 MsgBoxStyle.MsgBoxRight +
                                 MsgBoxStyle.MsgBoxRtlReading)
            End Try
        End Sub
    
        Private Sub DownloadThreadStart()
            Try
                bytes = New WebClient().DownloadData("http://code.613m.org/feed.php")
            Catch ex As Exception
            End Try
        End Sub
    
        Private Sub NotifyIcon1_BalloonTipClicked(sender As Object,
                                                  e As System.EventArgs) Handles NotifyIcon1.BalloonTipClicked
            Try
                Process.Start(href)
            Catch ex As Exception
                MsgBox(ex.Message, MsgBoxStyle.Exclamation +
                                     MsgBoxStyle.MsgBoxRight +
                                     MsgBoxStyle.MsgBoxRtlReading)
            End Try
        End Sub
    

    פורסם במקור בפורום CODE613 ב13/02/2014 10:56 (+02:00)

    יעקובוב פיתוח תוכנה ערוץ היוטיוב | אתר

    צפו יוונים נקבצו עלי

    תגובה 1 תגובה אחרונה
    2
  • clickoneC מנותק
    clickoneC מנותק
    clickone
    כתב ב נערך לאחרונה על ידי
    #2

    תודה על השיתוף...
    והנה פרוייקט מוכן המבוסס על מה שרחמים כתב.....
    Code613m.zip

    פורסם במקור בפורום CODE613 ב13/02/2014 12:42 (+02:00)

    אין טסט כמו פרודקשן.

    המייל שלי urivpn@gmail.com

    תגובה 1 תגובה אחרונה
    2
  • K מנותק
    K מנותק
    kingyes
    כתב ב נערך לאחרונה על ידי
    #3

    לא בשביל משהו.. אבל אם היית כותב את זה בתסריט פייטון.. היית רושם את כל זה ב-4-8 שורות.. ואולי בשביל Notification.. היית מוסיף עוד 2 שורות.
    (כמובן בלי טעינה של כל ה-GUI וכו'.. אלא קוד נקי בלי פקדים מיותרים).

    פורסם במקור בפורום CODE613 ב13/02/2014 13:50 (+02:00)

    תגובה 1 תגובה אחרונה
    0
  • dovidD מחובר
    dovidD מחובר
    dovid ניהול
    כתב ב נערך לאחרונה על ידי
    #4

    @KingYes

    לא בשביל משהו.. אבל אם היית כותב את זה בתסריט פייטון.. היית רושם את כל זה ב-4-8 שורות.. ואולי בשביל Notification.. היית מוסיף עוד 2 שורות.
    (כמובן בלי טעינה של כל ה-GUI וכו'.. אלא קוד נקי בלי פקדים מיותרים).

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

    פורסם במקור בפורום CODE613 ב13/02/2014 15:30 (+02:00)

    אפשר ליצור קשר dovid@tchumim.com

    תגובה 1 תגובה אחרונה
    0
  • dovidD מחובר
    dovidD מחובר
    dovid ניהול
    כתב ב נערך לאחרונה על ידי
    #5

    רחמים, קוד ממש מוצלח ויפה!!
    אבל הערות קטנות:
    א. הסיפור של הlen והbyte כנראה במקורו נועד לחסוך ריענון במקרה שלא השתנו הנתונים, אך בפועל הוא לא עושה זאת, שים לב.
    ב. אתה מקבל את הנתונים לבתים>XML>ואז לDataSet. מבחינת קריאות עדיף לקצר. ניתן לקרוא ישירות מXML ואפשר להוריד ישירות כטקסט ועוד.

    עריכה: שאלה א' מתרצת את שאלה ב', בשביל לקבל מס' בתים עדיף להוריד בתים וDataSet מיקל על קריאת XML. אבל בינתיים האמור בשאלה א' לא מיושם.

    בע"ה אני אעלה בהמשך גירסה משלי אם תיקונים שונים.

    פורסם במקור בפורום CODE613 ב13/02/2014 15:40 (+02:00)

    אפשר ליצור קשר dovid@tchumim.com

    תגובה 1 תגובה אחרונה
    1
  • K מנותק
    K מנותק
    kingyes
    כתב ב נערך לאחרונה על ידי
    #6

    יאללה דוד.. בזרימה..

    """
    @author Yakir Sitbon <http://www.yakirs.net/>
    """
    import feedparser
    
    
    def main():
        d = feedparser.parse('http://code.613m.org/feed.php')
        for post in d.entries:
            print post.title + ": " + post.link + "\n"
    
    main()
    

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

    פורסם במקור בפורום CODE613 ב13/02/2014 16:40 (+02:00)

    תגובה 1 תגובה אחרונה
    0
  • K מנותק
    K מנותק
    kingyes
    כתב ב נערך לאחרונה על ידי
    #7

    רחמים.. מה הקטע של השורה הזאת:

    'מנסה להוריד נתונים עד 10 שניות
                For I = 0 To 10
                    Threading.Thread.Sleep(1000)
                    If DownloadThread.IsAlive = False Then
                        Exit For
                    End If
                Next
    

    אי אפשר לרשום ישירות ב-Sleep את המספר 1000 * 10 (10,000) וזהו? למה צריך פה לולאה בשביל זה?

    פורסם במקור בפורום CODE613 ב13/02/2014 16:46 (+02:00)

    תגובה 1 תגובה אחרונה
    0
  • dovidD מחובר
    dovidD מחובר
    dovid ניהול
    כתב ב נערך לאחרונה על ידי
    #8

    @KingYes

    רחמים.. מה הקטע של השורה הזאת:

    'מנסה להוריד נתונים עד 10 שניות
                For I = 0 To 10
                    Threading.Thread.Sleep(1000)
                    If DownloadThread.IsAlive = False Then
                        Exit For
                    End If
                Next
    

    אי אפשר לרשום ישירות ב-Sleep את המספר 1000 * 10 (10,000) וזהו? למה צריך פה לולאה בשביל זה?

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

    פורסם במקור בפורום CODE613 ב13/02/2014 16:48 (+02:00)

    אפשר ליצור קשר dovid@tchumim.com

    תגובה 1 תגובה אחרונה
    0
  • K מנותק
    K מנותק
    kingyes
    כתב ב נערך לאחרונה על ידי
    #9

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

    יותר מזה לדעתי, במיוחד שזה RSS בודד, למה הפעולה הזאת לא יכול לעבוד פעם ב-5 דקות לכל המוקדם? 10 שניות זה ממש ממש "להציק" לשרת ולמחשב שלך.

    פורסם במקור בפורום CODE613 ב13/02/2014 16:52 (+02:00)

    תגובה 1 תגובה אחרונה
    0
  • רחמיםר מנותק
    רחמיםר מנותק
    רחמים
    כתב ב נערך לאחרונה על ידי
    #10

    הטיימר בודק כל דקה מה חדש ב RSS
    בתוך ה10 שניות ניתנת הזדמנות להוריד את ה XML

    פורסם במקור בפורום CODE613 ב13/02/2014 16:53 (+02:00)

    יעקובוב פיתוח תוכנה ערוץ היוטיוב | אתר

    צפו יוונים נקבצו עלי

    תגובה 1 תגובה אחרונה
    0
  • clickoneC מנותק
    clickoneC מנותק
    clickone
    כתב ב נערך לאחרונה על ידי
    #11

    @KingYes

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

    יותר מזה לדעתי, במיוחד שזה RSS בודד, למה הפעולה הזאת לא יכול לעבוד פעם ב-5 דקות לכל המוקדם? 10 שניות זה ממש ממש "להציק" לשרת ולמחשב שלך.

    את האמת יקיר, אני ממש מכור לפורום המדהים הזה, ובודק כל רגע מה התחדש, והRSS הזה ממש עוזר. אם זה יהיה פעם ב5 דקות, אני כבר יעשה ריענון לדפדפן....

    פורסם במקור בפורום CODE613 ב13/02/2014 16:58 (+02:00)

    אין טסט כמו פרודקשן.

    המייל שלי urivpn@gmail.com

    תגובה 1 תגובה אחרונה
    1
  • dovidD מחובר
    dovidD מחובר
    dovid ניהול
    כתב ב נערך לאחרונה על ידי
    #12

    יקיר, במקרה זה ניצחת.
    הנה הכי קומפקטי בC#:

    using System;
    using System.Xml.Linq;
    
    namespace CsConsole
    {
        class RssReader
        {
            public RssReader()
            {
                XNamespace ns = "http://www.w3.org/2005/Atom";
                foreach (var item in XDocument.Load("http://code.613m.org/feed.php").Descendants(ns + "entry"))
                    Console.Write("Title: {0} /n Link: {1}", item.Element(ns + "title").Value, item.Element(ns + "link").Value);
    
            }
        }
    }
    

    פורסם במקור בפורום CODE613 ב13/02/2014 17:29 (+02:00)

    אפשר ליצור קשר dovid@tchumim.com

    תגובה 1 תגובה אחרונה
    1
  • dovidD מחובר
    dovidD מחובר
    dovid ניהול
    כתב ב נערך לאחרונה על ידי
    #13

    @KingYes

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

    יותר מזה לדעתי, במיוחד שזה RSS בודד, למה הפעולה הזאת לא יכול לעבוד פעם ב-5 דקות לכל המוקדם? 10 שניות זה ממש ממש "להציק" לשרת ולמחשב שלך.

    לא הבנת. ה10 שניות זה טווח שבו מרשים למחשב להמתין לקובץ אח"כ מוותרים (timeout).
    אם הכל הולך כשורה המחשב לא מוטרד כלל ומייד מגיע הקובץ.
    [u:2rxfif2e]קצב העדכון[/u:2rxfif2e] כלל לא מופיע בקוד שרחמים הביא!

    פורסם במקור בפורום CODE613 ב13/02/2014 17:32 (+02:00)

    אפשר ליצור קשר dovid@tchumim.com

    תגובה 1 תגובה אחרונה
    0
  • dovidD מחובר
    dovidD מחובר
    dovid ניהול
    כתב ב נערך לאחרונה על ידי
    #14

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

    Public Class RssForumRead
    
        Public Class ItemRss
            Public Property authorname As String
            Public Property categoryTitle As String
            Public Property categoryLink As String
            Public Property Content As String
            Public Property UpdateAt As Date
    
            Public Sub New(author As String, Cat As String, CatLink As String, Cont As String, At As Date)
                authorname = author
                categoryTitle = Cat
                categoryLink = CatLink
                Content = Cont
                UpdateAt = At
            End Sub
        End Class
    
        Public Property Address As String = "http://code.613m.org/feed.php"
    
        Public Property IntervalUpdate As Integer
            Get
                Return Timer.Interval
            End Get
            Set(value As Integer)
                Timer.Interval = value
            End Set
        End Property
    
    
        Private ns As XNamespace = "http://www.w3.org/2005/Atom"
        Private lastDate As Date
        Private Timer As Timers.Timer
    
        Public Sub New()
            Timer = New Timers.Timer(10000)
            DownloadData()
            AddHandler Timer.Elapsed, AddressOf DownloadData
            Timer.Start()
        End Sub
    
        Private Function DateFromForumFormat(str As String) As Date
            Dim extStr = str.Split("+")(0)
            If String.IsNullOrEmpty(extStr) Then Return #1/1/1900#
            Return Date.ParseExact(extStr, "yyyy-MM-dd\THH:mm:ss", Globalization.CultureInfo.InvariantCulture)
        End Function
    
        Private Sub DownloadData()
            Dim xmlDoc = System.Xml.Linq.XDocument.Load("http://code.613m.org/feed.php")
            Dim s = xmlDoc.Root.Name
            Dim NewEl = From item In xmlDoc.Element(ns + "feed").Elements(ns + "entry")
                        Let datePub = DateFromForumFormat(item.Element(ns + "published"))
                        Where datePub > lastDate
                        Let cat = item.Element(ns + "category")
                        Select New ItemRss(item.Element(ns + "author").Elements().First().Value,
                                           cat.Attribute("label"),
                                           cat.Attribute("scheme"),
                                           item.Element(ns + "content").Value,
                                           datePub)
    
            If NewEl.Any Then
                RaiseEvent NewItems(NewEl)
                lastDate = NewEl.First().UpdateAt
            End If
        End Sub
    
        Public Event NewItems(items As IEnumerable(Of ItemRss))
    
    End Class
    

    פורסם במקור בפורום CODE613 ב13/02/2014 18:14 (+02:00)

    אפשר ליצור קשר dovid@tchumim.com

    תגובה 1 תגובה אחרונה
    0
  • K מנותק
    K מנותק
    kingyes
    כתב ב נערך לאחרונה על ידי
    #15

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

    פורסם במקור בפורום CODE613 ב13/02/2014 18:22 (+02:00)

    תגובה 1 תגובה אחרונה
    0
  • M מנותק
    M מנותק
    magicode
    כתב ב נערך לאחרונה על ידי
    #16

    למה שלא תורידו את זה.
    http://clients2.google.com/service/update2/crx?response=redirect&x=id%3Dpnjaodmkngahhkoihejjehlcdlnohgmp%26uc%26lang%3Den-US&prod=chrome

    זה תוסף לכרום שקורא rss מכל אתר שתומך בזה.

    פורסם במקור בפורום CODE613 ב13/02/2014 18:28 (+02:00)

    תגובה 1 תגובה אחרונה
    0
  • רחמיםר מנותק
    רחמיםר מנותק
    רחמים
    כתב ב נערך לאחרונה על ידי
    #17

    ואם כרום סגור? או אם משתמשים בדפדפן אחר ?

    פורסם במקור בפורום CODE613 ב13/02/2014 18:29 (+02:00)

    יעקובוב פיתוח תוכנה ערוץ היוטיוב | אתר

    צפו יוונים נקבצו עלי

    תגובה 1 תגובה אחרונה
    0
  • dovidD מחובר
    dovidD מחובר
    dovid ניהול
    כתב ב נערך לאחרונה על ידי
    #18

    @KingYes

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

    תראה זה שאלה שלישית שלך על הקוד, תירגע...
    דבר ראשון זה לא ממש timeout. timeout של סוקט אני סבור שזה הזמן שבין בקשה לתשובה, ואילו במקרה הורדת קובץ יכול להיות שיש תשובה מהירה אבל זה קובץ גדול, ואז זה ממומש בזרם (stream), שזה בקשות קטנות (אני חושב, לא יודע איך כתבו את המחלקה של webclient). גם במקרה כזה בקוד של רחמים ההורדה תיקטע עקב איטיותה.

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

    פורסם במקור בפורום CODE613 ב13/02/2014 18:33 (+02:00)

    אפשר ליצור קשר dovid@tchumim.com

    תגובה 1 תגובה אחרונה
    0
  • K מנותק
    K מנותק
    kingyes
    כתב ב נערך לאחרונה על ידי
    #19

    אני יעצור פה עם ה"שאלות"..
    יש פרוייקט מאוד מומלץ.. ואני מאוד מרוצה ממנו, עושה עבודה ממש טובה.. אז הנה השיתוף: http://www.feednotifier.com/

    אתם תהנו 🙂

    פורסם במקור בפורום CODE613 ב13/02/2014 18:39 (+02:00)

    תגובה 1 תגובה אחרונה
    1
  • רחמיםר מנותק
    רחמיםר מנותק
    רחמים
    כתב ב נערך לאחרונה על ידי
    #20

    קצת שיפצתי את הקוד שלי על פי הקוד של דוד:

    1. בקריאת ה XML
    2. בדיקה על פי תאריך אחרון
    3. הרווחנו בקוד הזה שגם אם תוכנת נתיב סגורה זה לא מפריע לקרא את ה RSS

    שימו לב!
    יש להגדיר את ה Interval של הטיימר ל 60 שניות לפחות.

    Private ns As XNamespace = "http://www.w3.org/2005/Atom"
        Private lastDate As Date = Date.MinValue
        Private xmlDoc As XDocument
        Private href As String
    
        Private Sub Timer2_Tick(sender As System.Object, e As System.EventArgs) Handles Timer2.Tick
            Try
                Dim DownloadThread = New Threading.Thread(Sub()
                                                              Try
                                                                  xmlDoc = XDocument.Load("http://code.613m.org/feed.php")
                                                              Catch ex As Exception
                                                              End Try
                                                          End Sub)
                DownloadThread.Start()
                'מנסה להוריד נתונים עד 10 שניות
                For I = 0 To 10
                    Threading.Thread.Sleep(1000)
                    If DownloadThread.IsAlive = False Then
                        Exit For
                    End If
                Next
                'יוצא אם עד אחר 10 שניות לא הצלח להוריד
                If DownloadThread.IsAlive Then
                    DownloadThread.Abort()
                    Exit Sub
                End If
    
                Dim XEl As XElement = xmlDoc.Element(ns + "feed").Elements(ns + "entry")(0)
                If Date.Parse(XEl.Element(ns + "published").Value) > lastDate Then
                    lastDate = Now
                    Dim sb As New StringBuilder
                    sb.AppendLine("המחבר: " & XEl.Element(ns + "author").Value)
                    sb.AppendLine("נושא: " & XEl.Element(ns + "title").Value)
                    sb.AppendLine("תוכן ההודעה: " & XEl.Element(ns + "content").Value)
                    href = XEl.Element(ns + "link").Attributes("href")(0).Value
                    sb.AppendLine("לחץ כאן למעבר להודעה החדשה")
                    NotifyIcon1.ShowBalloonTip(5555, "הודעה חדשה בפורום", sb.ToString, ToolTipIcon.Info)
                End If
            Catch ex As Exception
                MsgBox(ex.Message, MsgBoxStyle.Exclamation +
                                 MsgBoxStyle.MsgBoxRight +
                                 MsgBoxStyle.MsgBoxRtlReading)
            End Try
        End Sub
        Private Sub NotifyIcon1_BalloonTipClicked(sender As Object,
                                                  e As System.EventArgs) Handles NotifyIcon1.BalloonTipClicked
            Try
                Process.Start(href)
            Catch ex As Exception
                MsgBox(ex.Message, MsgBoxStyle.Exclamation +
                                     MsgBoxStyle.MsgBoxRight +
                                     MsgBoxStyle.MsgBoxRtlReading)
            End Try
        End Sub
    

    פורסם במקור בפורום CODE613 ב14/02/2014 13:40 (+02:00)

    יעקובוב פיתוח תוכנה ערוץ היוטיוב | אתר

    צפו יוונים נקבצו עלי

    תגובה 1 תגובה אחרונה
    1

  • 1
  • 2
  • התחברות

  • אין לך חשבון עדיין? הרשמה

  • התחברו או הירשמו כדי לחפש.
  • פוסט ראשון
    פוסט אחרון
0
  • דף הבית
  • קטגוריות
  • פוסטים אחרונים
  • משתמשים
  • חיפוש
  • חוקי הפורום
  • התחברות

  • אין לך חשבון עדיין? הרשמה

  • התחברו או הירשמו כדי לחפש.