Question amélioration d'une fonction basique

Plus d'informations
il y a 15 ans 3 mois #8226 par jojo
Bonjour les PowerShelleurs :laugh:

J'ai créer une petite fonction pour m'afficher les derniers infos de mes sports préférés:

[code:1]Function Get-MyFavoriteSport {
param(
[int32]$newest=3
)
$arr = $()
$arr = $(
\"www.eurosport.fr/football/rss.xml\";,
\"www.eurosport.fr/handball/rss.xml\";,
\"www.eurosport.fr/natation/rss.xml\";
)
$n = new-object Xml
$arr | ForEach-object {
$n.Load($_)
$n.Rss.Channel.item | select -Property @{
Name=\"Les Dernières Infos\";Expression={$_.Title}
} -first $newest
\"\"
}
}
[/code:1]

voici l'affichage:

[code:1]PS D:\Documents and Settings\moi> Get-MyFavoriteSport

Les Dernières Infos
Football - Ligue 1 - Gourcuff et \"le complot\" contre Yoann
Football - Ligue 1 - Bodmer, alternative crédible
Football - Ligue des Champions - Cris, le cinquantième rugissant

Handball - Championnat d'Europe - Euro dames, mode d'emploi
Handball - Championnat d'Europe - Krumbholz: \"En 24 heures, on peut tout perdre\"
Handball - Champions League - Montpellier ? Ça va, ouf !

Natation - Ch.France - Petit bassin - Gilot, roi du cent
Natation - Ch.France - Petit bassin - Bousquet positive
Natation - Ch.France - Petit bassin - Retour en force de Bousquet[/code:1]


ce que je veux c'est un affichage comme ça:

[code:1]n.heures football

1h le barça 5 le real 0
2h Ligue des Champions - Cris..2
3.3h Ligue des Champions - Cris..1

n.heures handball

3.2h Champions League - Montpellier
5h Champions League - Montpellier
10h Champions League - Montpellier

etc..[/code:1]

j'ai tenter beaucoup de choses mais rien...le problème de conversion de date aussi ne m'a pas aider..

avez-vous peut-être une idée...si vous avez d'autres améliorations pour cette fonction..je serais aussi ravi

merci ;)<br><br>Message édité par: jojo, à: 7/12/10 12:17

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 15 ans 3 mois #8228 par jojo
j'avance un peu, mais il me manque la conversion de la date de PubDate en heure et le titre de chaque sport:


[code:1] Function Get-MyFavoriteSport {
param(
[int32]$newest=3
)
$arr = $()
$arr = $(
\&quot;www.eurosport.fr/football/rss.xml\";,
\&quot;www.eurosport.fr/handball/rss.xml\";,
\&quot;www.eurosport.fr/natation/rss.xml\";
)
$n = new-object Xml
$arr | ForEach-object {
$n.Load($_)
$n.Rss.Channel.item | Select-Object -Property @{
Name=\&quot;n.Heures\&quot;;Expression={ $_.PubDate -as [datetime]}
},@{
Name=\&quot;Titre\&quot;;Expression={$_.Title}
} -First $newest | Format-Table -auto
\&quot;\&quot;
}
}[/code:1]

voici le sortie:
[code:1]
PS D:\&gt;
PS D:\&gt; Function Get-MyFavoriteSport {
&gt;&gt; param(
&gt;&gt; [int32]$newest=3
&gt;&gt; )
&gt;&gt; $arr = $()
&gt;&gt; $arr = $(
&gt;&gt; \&quot;www.eurosport.fr/football/rss.xml\";,
&gt;&gt; \&quot;www.eurosport.fr/handball/rss.xml\";,
&gt;&gt; \&quot;www.eurosport.fr/natation/rss.xml\";
&gt;&gt; )
&gt;&gt; $n = new-object Xml
&gt;&gt; $arr | ForEach-object {
&gt;&gt; $n.Load($_)
&gt;&gt; $n.Rss.Channel.item | Select-Object -Property @{
&gt;&gt; Name=\&quot;n.Heures\&quot;;Expression={ $_.PubDate -as [datetime]}
&gt;&gt; },@{
&gt;&gt; Name=\&quot;Titre\&quot;;Expression={$_.Title}
&gt;&gt; } -First $newest | Format-Table -auto
&gt;&gt; \&quot;\&quot;
&gt;&gt; }
&gt;&gt; }
&gt;&gt;
PS D:\&gt; Get-MyFavoriteSport -newest 2

n.Heures Titre

06/12/2010 17:27:16 Football - Ligue des Champions - Drogba : Loin des yeux, près du cour
07/12/2010 12:49:40 Football - Ballon d'Or FIFA - Sneijder, l'Oranje amer




n.Heures Titre

07/12/2010 10:29:27 Handball - Championnat d'Europe - Euro dames, mode d'emploi
06/12/2010 15:47:31 Handball - Championnat d'Europe - Krumbholz: \&quot;En 24 heures, on peut tout p




n.Heures Titre

05/12/2010 17:26:25 Natation - Ch.France - Petit bassin - Gilot, roi du cent
04/12/2010 16:53:48 Natation - Ch.France - Petit bassin - Bousquet positive



PS D:\&gt;[/code:1]

Message édité par: jojo, à: 7/12/10 13:17<br><br>Message édité par: jojo, à: 7/12/10 13:18

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 15 ans 3 mois #8231 par jojo
encore, on avance un peu, j'ai pu bricoler ceci, si quelqu'un peux me dire si c'est juste ou pas merci :whistle:

[code:1] Function Get-MyFavoriteSport {
param(
[int32]$newest=3
)
$arr = $()
$arr = $(
\&quot;www.eurosport.fr/football/rss.xml\";,
\&quot;www.eurosport.fr/handball/rss.xml\";,
\&quot;www.eurosport.fr/natation/rss.xml\";
)
$n = new-object Xml
$arr | ForEach-object {
$n.Load($_)
$n.Rss.Channel.item | Select-Object -Property @{
Name=\&quot;n.Heures\&quot;;Expression={
\&quot;{0} Heure\&quot; -f (($_.PubDate -as [datetime]) -(date)).Hours
}
},@{
Name=\&quot;Titre\&quot;;Expression={$_.Title}
} -First $newest | Format-Table -auto
\&quot;\&quot;
}
}[/code:1]

il manque encore le nommage des titres selon les sports

Message édité par: jojo, à: 7/12/10 14:13<br><br>Message édité par: jojo, à: 7/12/10 14:14

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 15 ans 3 mois #8233 par Jacques Barathon
Jolie fonction.

La conversion de la date est correcte. Par contre, tu n'as pas fait de tri par date avant de faire ton select -first, tu n'as donc aucune garantie d'avoir les derniers éléments publiés.

D'ailleurs, en testant ta fonction j'ai noté qu'elle n'affichait pas exactement les trois derniers titres pour chaque sport.

Voici donc une version corrigée, et au passage j'ai modifié le mode d'affichage de l'âge et j'ai modifié l'en-tête de la colonne 'Titre' pour inclure le nom du sport (propriété Category de chaque article) :

[code:1]
param(
[int32]$newest=3
)
$arr = $()
$arr = $(
\&quot;www.eurosport.fr/football/rss.xml\";,
\&quot;www.eurosport.fr/handball/rss.xml\";,
\&quot;www.eurosport.fr/natation/rss.xml\";
)
$n = new-object Xml
$arr | ForEach-object {
$n.Load($_)
$n.Rss.Channel.item | select `
@{n=\&quot;Titre\&quot;;
e={$_.title}},
@{n=\&quot;Age\&quot;;
e={[math]::Ceiling(((get-date) - ($_.pubdate -as [DateTime])).TotalHours)}} `
| sort Age | select -first $newest | Format-Table `
@{n=\&quot;Age\&quot;;e={\&quot;{0} h\&quot; -f $_.age};a=\&quot;right\&quot;},
@{n=\&quot;Titres {0}\&quot; -f $n.Rss.Channel.item[0].Category;e={$_.titre}} -auto
\&quot;\&quot;
}
[/code:1]

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 15 ans 3 mois #8234 par jojo
Merci Janel :cheer:

voici l'affichage sur mon xp:

[code:1]PS D:\&gt; function Get-MyFavoriteSportByJanel {
&gt;&gt; param(
&gt;&gt; [int32]$newest=3
&gt;&gt; )
&gt;&gt; $arr = $()
&gt;&gt; $arr = $(
&gt;&gt; \&quot;www.eurosport.fr/football/rss.xml\";,
&gt;&gt; \&quot;www.eurosport.fr/handball/rss.xml\";,
&gt;&gt; \&quot;www.eurosport.fr/natation/rss.xml\";
&gt;&gt; )
&gt;&gt; $n = new-object Xml
&gt;&gt; $arr | ForEach-object {
&gt;&gt; $n.Load($_)
&gt;&gt; $n.Rss.Channel.item | select `
&gt;&gt; @{n=\&quot;Titre\&quot;;
&gt;&gt; e={$_.title}},
&gt;&gt; @{n=\&quot;Age\&quot;;
&gt;&gt; e={[math]::Ceiling(((get-date) - ($_.pubdate -as [DateTime])).TotalHours)}} `
&gt;&gt; | sort Age | select -first $newest | Format-Table `
&gt;&gt; @{n=\&quot;Age\&quot;;e={\&quot;{0} h\&quot; -f $_.age};a=\&quot;right\&quot;},
&gt;&gt; @{n=\&quot;Titres {0}\&quot; -f $n.Rss.Channel.item[0].Category;e={$_.titre}} -auto
&gt;&gt; \&quot;\&quot;
&gt;&gt; }
&gt;&gt; }
#### Affichage ####
PS D:\&gt; Get-MyFavoriteSportByJanel -newest 2

Age Titres FOOTBALL
---
-4079 h Football - Ligue des Champions - La conférence de Deschamps et Mandanda EN DIRECT
-4076 h Football - Blog - Wenger : \&quot;Benitez va durer\&quot;




Age Titres HANDBALL
---
-4073 h Handball - Championnat d'Europe - Euro dames, mode d'emploi
-4061 h Handball - Champions League - Montpellier ? Ça va, ouf !




Age Titres NATATION
---
-4032 h Natation - Ch.France - Petit bassin - Gilot, roi du cent
-4008 h Natation - Ch.France - Petit bassin - Bousquet positive[/code:1]

comme tu vois je crois qu'il y a un problème dans le calcul de l'heure..une idée du pourquoi du comment ?:silly:

tu n'as pas fait de tri par date avant de faire ton select -first


PS: j'ai lu autrefois qu'il vaut mieux mettre select-object avant sort-object pour des raisons de viteses d'executions..mais je ne sais pas trop..

merci encore :P

Message édité par: jojo, à: 7/12/10 16:52<br><br>Message édité par: jojo, à: 7/12/10 16:53

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 15 ans 3 mois #8235 par Jacques Barathon
Bizarre, c'est nickel chez moi, sur un XP également :

[code:1]
PS&gt; function mysports {
&gt;&gt; param(
&gt;&gt; [int32]$newest=3
&gt;&gt; )
&gt;&gt; $arr = $()
&gt;&gt; $arr = $(
&gt;&gt; \&quot;www.eurosport.fr/football/rss.xml\";,
&gt;&gt; \&quot;www.eurosport.fr/handball/rss.xml\";,
&gt;&gt; \&quot;www.eurosport.fr/natation/rss.xml\";
&gt;&gt; )
&gt;&gt; $n = new-object Xml
&gt;&gt; $arr | ForEach-object {
&gt;&gt; $n.Load($_)
&gt;&gt; $n.Rss.Channel.item | select `
&gt;&gt; @{n=\&quot;Titre\&quot;;
&gt;&gt; e={$_.title}},
&gt;&gt; @{n=\&quot;Age\&quot;;
&gt;&gt; e={[math]::Ceiling(((get-date) - ($_.pubdate -as [DateTime])).TotalHours)}} `
&gt;&gt; | sort Age | select -first $newest | Format-Table `
&gt;&gt; @{n=\&quot;Age\&quot;;e={\&quot;{0} h\&quot; -f $_.age};a=\&quot;right\&quot;},
&gt;&gt; @{n=\&quot;Titres {0}\&quot; -f $n.Rss.Channel.item[0].Category;e={$_.titre}} -auto
&gt;&gt; \&quot;\&quot;
&gt;&gt; }
&gt;&gt; }
&gt;&gt;
PS&gt; mysports -newest 2

Age Titres FOOTBALL
---
4 h Football - Blog - Wenger : \&quot;Benitez va durer\&quot;
5 h Football - Ballon d'Or FIFA - Sneijder, l'Oranje amer




Age Titres HANDBALL
---
7 h Handball - Championnat d'Europe - Euro dames, mode d'emploi
19 h Handball - Champions League - Montpellier ? Ça va, ouf !




Age Titres NATATION
---
48 h Natation - Ch.France - Petit bassin - Gilot, roi du cent
73 h Natation - Ch.France - Petit bassin - Bousquet positive
[/code:1]

Je vais regarder de plus près...

Connexion ou Créer un compte pour participer à la conversation.

Temps de génération de la page : 0.048 secondes
Propulsé par Kunena