[vb6 - activex] rgweather - la météo simplement dans vos applis

Soyez le premier à donner votre avis sur cette source.

Vue 5 804 fois - Téléchargée 843 fois

Description

Un OCX ActiveX qui télécharge et traite les données météo sur une période de trois jours dont je jours en cours
Utilisation simple et interface conviviale

Source / Exemple :


'in the zip

'Reste plus qu'a compilé !

Conclusion :


Laisser vos com's

Codes Sources

A voir également

Ajouter un commentaire

Commentaires

cs_magicgus
Messages postés
207
Date d'inscription
mardi 10 février 2004
Statut
Membre
Dernière intervention
14 septembre 2011
-
Je vient de le tester en créant un nouveau projet, il m'a fallu environ 2 minutes pour faire une fenetre qui m'affiche la météo, un form, mon control, 4 label et le tour est joué !

Le code que j'ai mis pour qu'il soit fonctionnel (ayant indiquer une ville au préalable)

Private Sub Form_Load()
Weather1.Refresh
End Sub

Private Sub Weather1_RefreshFinnish(Status As RGWeather.EnumStatus, StatusDescription As String)
Label1.Caption = Weather1.CityName
Label2.Caption = Weather1.GetData(DataAbout, Today, Current)
Label3.Caption = Weather1.GetData(Temperature, Today, Current)
Label4.Caption = Weather1.GetData(PictureName, Today, Current) & ".jpg"
End Sub

Facile comme bonjour !
Renfield
Messages postés
17280
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
21 juillet 2019
56 -
pas tres convivial, ce GetData...
Label2.Caption = Weather1.GetData(DataAbout, Today, Current)

pas la peine de dupliquer ton Type:
Type TypeJour2Matin: Date As String: Temperature As String: Condition As String: Image As String: End Type
Type TypeJour2Midi: Date As String: Temperature As String: Condition As String: Image As String: End Type
Type TypeJour2ApresMidi: Date As String: Temperature As String: Condition As String: Image As String: End Type
Type TypeJour2Soir: Date As String: Temperature As String: Condition As String: Image As String: End Type

tu aurais pu te simplifier la vie en utilisant le DOM pour telecharger et lire ton xml, plutot que de le faire via APIs et manipulations de chaines de texte.
ca aurait pu meme te permettre de supprimer le code concernant l'UTF16.
Renfield
Messages postés
17280
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
21 juillet 2019
56 -
exemple de ce qui peux etre fait :
(en ajoutant dans les references 'Microsoft XML 6')

Private Type Prevision
Date As Date
Matin_Temperature As Single
Matin_Picto As String
Midi_Temperature As Single
Midi_Picto As String
ApresMidi_Temperature As Single
ApresMidi_Picto As String
Soir_Temperature As Single
Soir_Picto As String
End Type

Private mxtMeteo(2) As Prevision

'Fonction qui renvoie le numéro correspondant à la periode en coure, analysant les plages horaires pour savoir où l'on se situe dans le temps
Public Property Get CurrentPeriod() As DataPeriod
Select Case VBA.Hour(VBA.Time)
Case Is < 6
CurrentPeriod = Night
Case Is < 11
CurrentPeriod = Morning
Case Is < 18
CurrentPeriod = Afternoon
Case Is < 22
CurrentPeriod = Evening
Case Is < 24
CurrentPeriod = Night
End Select
End Property

Private Function MeteoRefresh(ByVal vsCity As String) As Boolean
Dim oXML As DOMDocument60
Dim oNode As IXMLDOMNode
Dim nIndexDay As Long
Set oXML = new DOMDocument60
oXML.async = False

If oXML.Load(UrlMeteoAPI & vsCity) Then
oXML.setProperty "SelectionNamespaces", "xmlns:meteo='http://www.meteorologic.net/rss/1.0'"

For Each oNode In oXML.selectNodes("rss/channel/item/meteo:weather")
With mxtMeteo(nIndexDay)
.Date = Date + nIndexDay

.Matin_Temperature = Val(oNode.selectSingleNode("@tempe_matin").Text)
.Matin_Picto = oNode.selectSingleNode("@pictos_matin").Text

.Midi_Temperature = Val(oNode.selectSingleNode("@tempe_midi").Text)
.Midi_Picto = oNode.selectSingleNode("@pictos_midi").Text

.ApresMidi_Temperature = Val(oNode.selectSingleNode("@tempe_apmidi").Text)
.ApresMidi_Picto = oNode.selectSingleNode("@pictos_apmidi").Text

.Soir_Temperature = Val(oNode.selectSingleNode("@tempe_soir").Text)
.Soir_Picto = oNode.selectSingleNode("@pictos_soir").Text
End With
nIndexDay = nIndexDay + 1
Next
MeteoRefresh = True
End If
End Function
cs_magicgus
Messages postés
207
Date d'inscription
mardi 10 février 2004
Statut
Membre
Dernière intervention
14 septembre 2011
-
C'est pas faut, encore faudrait il que je maitrise tout ça pour l'appliqué d'emblée, je suis un peut un bricoleur qui essayer de faire du bricolage prorpre, et pour ce qui est du XML en vrai je n'y connait rien, donc je me suis débrouiller autrement...
Renfield
Messages postés
17280
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
21 juillet 2019
56 -
après avoir testé ton projet, il ne m'a pas récupéré la météo, chez moi, hier soir.
au bout de quelques secondes (c'est long!) j'ai eu ton message d'erreur.

rapidement, je t'ai nettoyé ta fonction :
Public Property Get CurrentPeriod() As DataPeriod
Select Case VBA.Hour(VBA.Time)
Case Is < 6
CurrentPeriod = Night
Case Is < 11
CurrentPeriod = Morning
Case Is < 18
CurrentPeriod = Afternoon
Case Is < 22
CurrentPeriod = Evening
Case Is < 24
CurrentPeriod = Night
End Select
End Property

n'hésites pas, comme ici à renvoyer un DataPeriod et non un entier...
ca évitera a avoir, comme dans ta Form une pseudo table de correspondance :
1 - Matin 2 - Midi, etc.

Concernant la manipulation XML, c'est assez simple, au moins dans ton cas.

oXML.async = False

nous permet par exemple de demander à avoir un chargement synchrone (ce qu'il ne fait pas, par défault). Ainsi, le code attendra que le fichier XML soit chargé (ou non, si erreur).

Ici, on va charger le fichier, depuis un URL (ou un fichier sur le disque...)
Load renverra False en cas d'erreur.

If oXML.Load(UrlMeteoAPI & vsCity) Then
...
End If

La ligne :
oXML.setProperty "SelectionNamespaces", "xmlns:meteo='http://www.meteorologic.net/rss/1.0'"

est plus anecdotique... elle permet de déclarer que nous rechercherons des noeuds xml précédés de meteo: (déclaration effectuée également dans le XML)

ici, nous bouclons sur chacun des trois noeuds indiquant la météo.

For Each oNode In oXML.selectNodes("rss/channel/item/meteo:weather")

on voit une simple requete XPath, reprenant le cheminement dans l'arbre XML

plutot que d'exploiter l'attribut XML date, je prefere ajouter un nombre de jour à Date (ou VBA.Date, si tu preferes).

pour le reste, c'est assez basique :

.Matin_Temperature = Val(oNode.selectSingleNode("@tempe_matin").Text)
.Matin_Picto = oNode.selectSingleNode("@pictos_matin").Text

sélection XPath (comme selectNodes, mais en ne renvoyant pas une collection d'éléments mais bien un seul)

on part non plus de oXML, le document complet, mais de oNode, notre noeud meteo:weather
on demande l'attribut tempe_matin (@ => attribut) et on l'exploite.
j'aurais pu passer aussi par oNode.Attributes.getNamedItem("tempe_matin").Text

m'enfin...

bref, tout cela mis bout a bout te permet de supprimer trois de tes modules.

je t'encourage a ne pas conserver GetData...

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.