Preisalarm bei Änderung

  • VB.NET
  • .NET (FX) 4.5–4.8

Es gibt 3 Antworten in diesem Thema. Der letzte Beitrag () ist von mrMo.

    Preisalarm bei Änderung

    Hallo,

    ich möchte mit Visual Basic Studio ein Programm machen, dass wenn eine bestimmter website produkte den Preis ändern sollte alarm schlägt und mir den produkt zeigt. Aber es soll für alle produkte für dieser website gelten.

    z.B. food-italia.it
    food-italia.it/de/55-honig
    Akazienhonig von Le Terre di Marinella 9,99€ wenn der Preis sich ändert schlag alarm oder sende e-mail an musterman@...de

    habt ihr ne vorschlag für mich wie ich das realisieren soll oder gibt es schon was fertiges?
    Danke im voraus.

    Caroline

    Thema verschoben; Das Thema wird automatisch dort erstellt, wo man sich befindet, wenn man auf [* Neues Thema] klickt. ~VaporiZed

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „VaporiZed“ ()

    Hallo Caroline,
    um dein Ziel zu erreichen, müsstest du ein Programm schreiben, welches die API (=öffentliche Schnittstelle des Unternehmens) anfragt und sich dort Daten zieht. Die Logik kannst du schonmal schreiben, also die Vergleichsfunktionen, und so weiter.
    Was meinst du mit „Visual Basic Studio“? Wahrscheinlich eine WinForms-Anwendung in der Programmiersprache VB.NET, in der Entwicklungsumgebung Visual Studio, ja? Siehe Bild im Anhang.
    PS: Du solltest bereits ein wenig Code zur Verfügung stellen, Stichwort Eigeninitiative. Wir helfen sehr gerne, allerdings können wir nichts alles selbst schreiben – oder anders formuliert: wir können nichts kontrollieren, was nicht da ist.
    Ich setz' mich mal ran. Melde mich in 2 Stunden. :)

    Bilder
    • Visual Studio neues Projekt.png

      59,84 kB, 1.158×766, 63 mal angesehen
    Ich habe Dir etwas Code geschrieben:
    Klick mich

    VB.NET-Quellcode

    1. Imports Microsoft.VisualBasic.ControlChars
    2. Imports System.Runtime.InteropServices
    3. Imports System.Net.Mail
    4. Public NotInheritable Class FormMain
    5. Private ReadOnly Deu As New System.Globalization.CultureInfo("de-DE")
    6. Private Sollpreis As Double
    7. Private Istpreis As Double
    8. '———————————————————————————————————————————————————————————————————
    9. 'damit der PC nicht in den Energiesparmodus geht
    10. <FlagsAttribute()>
    11. Public Enum EXECUTION_STATE As UInt32
    12. ES_SYSTEM_REQUIRED = &H1
    13. ES_DISPLAY_REQUIRED = &H2
    14. ES_CONTINUOUS = &H80000000UI
    15. End Enum
    16. <DllImport("Kernel32.DLL", CharSet:=CharSet.Auto, SetLastError:=True)>
    17. Private Shared Function SetThreadExecutionState(ByVal state As EXECUTION_STATE) As EXECUTION_STATE
    18. End Function
    19. '———————————————————————————————————————————————————————————————————
    20. 'E-Mail
    21. Private Const MailFrom As String = "caroline1991@gmail.com"
    22. Private Const MailTo As String = "caroline1991@gmail.com"
    23. Private Const username As String = "caroline1991@gmail.com"
    24. Private Const Password As String = "12345"
    25. Private Const _SmtpServerPort As Integer = 587
    26. Private Const _SmtpServerHost As String = "smtp.gmail.com"
    27. '———————————————————————————————————————————————————————————————————
    28. 'für die API, um den Preis zu erfahren
    29. Private Shared _Client As New Net.WebClient()
    30. Private Const API_KEY As String = "11111-2222-3333-4444-55555555"
    31. '———————————————————————————————————————————————————————————————————
    32. Private Sub FormMain_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    33. Me.BackColor = Color.FromArgb(140, 140, 135)
    34. For Each Bu As Button In Me.Controls.OfType(Of Button)
    35. Bu.BackColor = Color.FromArgb(194, 194, 186)
    36. Next
    37. CheckBox1.Checked = True
    38. CheckBox2.Checked = True
    39. SetThreadExecutionState(EXECUTION_STATE.ES_SYSTEM_REQUIRED Or EXECUTION_STATE.ES_CONTINUOUS) ' Es kann zwar der Bildschirmschoner angehen (oder wie bei mir: Bildschirm ausgehen), aber der PC wechselt nicht in den Energiesparmodus.
    40. End Sub
    41. Private Sub Button_timer_on_Click(sender As Object, e As EventArgs) Handles Button_timer_on.Click
    42. Timer1.Start()
    43. End Sub
    44. Private Sub Button_timer_off_Click(sender As Object, e As EventArgs) Handles Button_timer_off.Click
    45. Timer1.Stop()
    46. End Sub
    47. Private Sub TextBox_Value_TextChanged(sender As Object, e As EventArgs) Handles TextBox_Value.TextChanged
    48. If Double.TryParse(TextBox_Value.Text, Globalization.NumberStyles.Float, Deu, Sollpreis) Then
    49. TextBox_Value.ForeColor = Color.FromArgb(0, 179, 0)
    50. Else
    51. TextBox_Value.ForeColor = Color.Red
    52. End If
    53. End Sub
    54. Private Sub Alarmsound()
    55. Me.WindowState = FormWindowState.Normal
    56. If System.IO.File.Exists($"{Application.StartupPath}\Wecker.wav") Then
    57. My.Computer.Audio.Play($"{Application.StartupPath}\Wecker.wav",
    58. Microsoft.VisualBasic.AudioPlayMode.Background)
    59. End If
    60. End Sub
    61. Private Sub send_Email()
    62. Using Emailantwort As New MailMessage
    63. Using SmtP As New SmtpClient(_SmtpServerHost)
    64. SmtP.UseDefaultCredentials = False
    65. Emailantwort.From = New MailAddress(MailFrom)
    66. Emailantwort.To.Add(MailTo)
    67. Emailantwort.Subject = $"Preisänderung{Date.Now.ToString("G", Deu)}"
    68. Emailantwort.BodyEncoding = New System.Text.UTF8Encoding
    69. Emailantwort.Body = "automatische E-Mail"
    70. Emailantwort.IsBodyHtml = True
    71. SmtP.Port = _SmtpServerPort
    72. SmtP.EnableSsl = True
    73. SmtP.Credentials = New System.Net.NetworkCredential(username, Password)
    74. SmtP.Send(Emailantwort)
    75. End Using
    76. End Using
    77. End Sub
    78. Private Shared Sub make_API_Call()
    79. 'hier die Internetseite befragen und Wert auf ‘Istpreis’ schreiben
    80. End Sub
    81. Private Sub FormMain_FormClosing(sender As Object, e As FormClosingEventArgs) Handles MyBase.FormClosing
    82. Dim Dr As DialogResult = MessageBox.Show("Wollen Sie wirklich beenden?",
    83. "",
    84. MessageBoxButtons.YesNo,
    85. MessageBoxIcon.Question)
    86. If Dr = DialogResult.No Then e.Cancel = True
    87. End Sub
    88. Private Sub Timer1_Tick(sender As Object, e As EventArgs) Handles Timer1.Tick
    89. make_API_Call()
    90. Istpreis = 3.0 ' Simulation, weil ich ja noch nicht die Internetseite abfrage
    91. If Istpreis < Sollpreis Then
    92. If CheckBox1.Checked Then
    93. send_Email()
    94. End If
    95. If CheckBox2.Checked Then
    96. Alarmsound()
    97. End If
    98. End If
    99. End Sub
    100. End Class



    Also, es ist ja so, dass das Programm dauerhaft laufen muss und in regelmäßigen Zeitabständen die API anfragt. Dafür darf der PC nicht in den Energiesparmodus gehen. Deswegen hab' ich eingebaut, dass das nicht passiert.

    Was das Senden einer E-Mail angeht: Das ist eigentlich nicht schlimm. Der Code ist fertig und funktioniert an sich. Du musst nur bei deinem E-Mail-Provider (im Code-Beispiel gmail) bekanntgeben, dass sich dein Programm dort einloggen darf. Bei Gmail läuft das so, dass man in den Einstellungen dort einen Schieberegler „Zugriff durch weniger sichere Apps“ einschaltet. Siehe Bild im Anhang. Achtung – das Passwort, um sich dort einzuloggen, steht noch im Code. Das geht natürlich besser, aber du kannst erstmal arbeiten. :)

    Dann musst du dich noch um die Prozedur „make_API_Call()“ kümmern. Dazu nimmt man einen Net.WebClient(). Den richtigen Aufruf konnte ich dir nicht vorbereiten, weil ich ja keinen Zugang zu der Food-Italia.it-API habe. Den musst du dir besorgen. Schreib die Leute an. Meistens ist das gratis (für ein paar Aufrufe am Tag). Im Code musst du dann den
    API-KEY ändern. Der Timer im Programm steht jetzt auf 5 Minuten. Falls das zu häufig ist, stell ihn auf 20 Minuten oder so. Und weil ich den Aufruf noch nicht habe, habe ich testhalber die Variable „Istpreis“ einfach so zugewiesen, so dass Alarm gegeben wird. Mit den CheckBoxen kannst du einstellen, ob ein Sound ertönt und dich nachts weckt. Das muss allerdings eine WAV-File sein, und zwar im PCM-Encoding. Besorg dir Audacity und erstelle dir so eine WAV-File.
    Bilder
    • Gmail-Account einstellen, dass VB-Programm sich einloggen darf.png

      65,95 kB, 1.919×467, 61 mal angesehen
    • GUI.png

      10,47 kB, 499×254, 58 mal angesehen

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Bartosz“ ()