C# tekst van een website krijgen

Status
Niet open voor verdere reacties.
Wat je kunt doen is een converter maken.
Dit zal werken maar dit zijn allemaal maar wat voorbeeldjes om het werkend te krijgen, zal niet allemaal erg optimaal zijn.

Als het dadelijk allemaal werkt kun je eens gaan kijken om dingen te verbeteren.

(zet deze class ergens in je project)
Code:
public class CurrentClassValueConverter : IValueConverter
{
	public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
	{
		var subject = (Subject)value;

		TimeSpan startles1 = new TimeSpan(08, 40, 0);
		TimeSpan endles1 = new TimeSpan(09, 25, 0);

		TimeSpan startles2 = new TimeSpan(09, 25, 0);
		TimeSpan endles2 = new TimeSpan(23, 10, 0); //test voor nu :P 
		TimeSpan now = DateTime.Now.TimeOfDay;


		if (subject.H == "1e" && now >= startles1 && now < endles1)
		{
			return new SolidColorBrush(Colors.Green);
		}

		if (subject.H == "2e" && now >= startles2 && now < endles2)
		{
			return new SolidColorBrush(Colors.Green);
		}
		
		//etc

		return new SolidColorBrush(Colors.DarkGray);
	}

	public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
	{
		throw new NotImplementedException();
	}
}

Je list zal dan zo eruit zien, een resource (de converter) en die zit vast aan je foreground color, die neemt de subject class en in de converter zet hij deze om naar een bepaalde kleur.
Code:
<phone:LongListSelector Name="lstMonday">
    <phone:LongListSelector.Resources>
        <phoneApp1:CurrentClassValueConverter x:Key="CurrentClassValueConverter"/>
    </phone:LongListSelector.Resources>
    <phone:LongListSelector.ItemTemplate>
        <DataTemplate>
            <Grid Margin="0,0,0,12">
                <Grid.ColumnDefinitions>
                    <ColumnDefinition Width="*" />
                    <ColumnDefinition Width="*" />
                    <ColumnDefinition Width="*" />
                    <ColumnDefinition Width="2*" />
                    <ColumnDefinition Width="*" />
                </Grid.ColumnDefinitions>
                <Grid.Resources>
                    <Style TargetType="TextBlock" BasedOn="{StaticResource PhoneTextLargeStyle}" />
                </Grid.Resources>
                <TextBlock Grid.Column="0" Text="{Binding H}" Foreground="{Binding Converter={StaticResource CurrentClassValueConverter}}" />
                <TextBlock Grid.Column="1" Text="{Binding A}" Foreground="{Binding Converter={StaticResource CurrentClassValueConverter}}" />
                <TextBlock Grid.Column="2" Text="{Binding B}" Foreground="{Binding Converter={StaticResource CurrentClassValueConverter}}" />
                <TextBlock Grid.Column="3" Text="{Binding C}" Foreground="{Binding Converter={StaticResource CurrentClassValueConverter}}" />
                <TextBlock Grid.Column="4" Text="{Binding D}" Foreground="{Binding Converter={StaticResource CurrentClassValueConverter}}" />
            </Grid>
        </DataTemplate>
    </phone:LongListSelector.ItemTemplate>
</phone:LongListSelector>



edit:
Als je meerdere lists in een document hebt kun je de resource ook in de page resources plaatsen, dan hoef je die maak 1x erin te zetten.
 
Laatst bewerkt:
Code:
<phoneApp1:CurrentClassValueConverter x:Key="CurrentClassValueConverter"/>

Dat stukje code klopt niet bij mij?
 
sorry namespace vergeten, plak het bovenin bij de andere:

Code:
xmlns:phoneApp1="clr-namespace:PhoneApp1"

je mag hem noemen zoals je wilt :p
 
Hoe weet je als er een wijziging is? Welke kleur is het dan op de website?
Ik zie alleen grijze en bruine, maar de roosters zijn hetzelfde.

Je kunt ook de data opslaan en laten zien als je het programma start, en als je refreshed kijk je eerst of de datum op de pagina anders is.
Zo ja, haal je de wijzigingen op en geef je de gebruiker een bericht dat er wijzigingen zijn.

Dit kun je ook met een background agent doen en de info op de livetile tonen wat zeer wenselijk is lijkt mij. (ook een toast message notificatie is mogelijk)
Je kunt zelfs met de agent op de tile de komende vakken aangeven.

Veel is mogelijk, maar misschien te veel op dit moment en zou je eerst de basis werkend willen hebben.
 
En als ik van een andere site informatie wil afhalen wat moet ik dan allemaal aan de code veranderen?
 
Dan moet je de methods waar je dat nu mee doet hebben voor de andere website. Het downloaden van de source en het parsen/scrapen van de data.

Werkt de basis van je app nu? Kun je het project dan eens uploaden zoals je het nu hebt?
 
De app werkt alleen weet ik nog niet echt hoe ik die eruit moet laten zien.
Kun je dat van dat parsen uitleggen, of weet je een site met uitleg daarvan?
Ik zal het dalijk of morgenvroeg doorsturen
 
Trouwens als er lesuitval is komt er vrij(in het rood) te staan en bij een lokaalwijziging word de tekst rood
 
Laatst bewerkt:
Ik zal dadelijk eens kijken, van 't weekend geen tijd voor gehad.

Hier is een site waar het xpath staat uitgelegd, dat is dus de string die de nodes/data ophaald uit de html.


edit:
ok, zie nu een vrij uur in rood, ging om de html. de class geeft aan wat het uurblok is. Normaal is het 'tableCell', de grijze zijn 'tableCellHidden' en de rode zijn:

Code:
<td class="tableCellRemoved" width="18" align="left">

    vrij

</td>


edit:
link vergeten :p http://www.w3schools.com/xpath/default.asp
 
Laatst bewerkt:
Hij werkt in ieder geval al (heeft nog wel error handling nodig)

Het eerste wat je zou kunnen doen voor je meer data van andere pagina's gaat halen is de code in classes zetten, het is een wir war van code nu. Classes in eigen *.cs files zetten, eventueel in mapjes (Converters, ViewModels, Services etc.)
(ik weet niet of je het concept van classes al begrijpt)

Ik denk dat je zelf ook wel soms niet meer ziet hoe alles zit in de mainpage.cs, de 600 regels met vanalles wat. (zelf wordt ik hier gek van :p)

En deze dingen:
Code:
            if (leerlingnummer2 == "101352")
            {
                naamklas.Text = "Han Swinkels";
                klas4.Text = "41";
            }
            if (leerlingnummer2 == "100982")
            {
                naamklas.Text = "Coen Aarts";
                klas4.Text = "52";
            }
            if (leerlingnummer2 == "101623")
            {
                naamklas.Text = "Lamyae Aissati";
                klas4.Text = "51";
            }
 etc.......
kun je ook van de html parsen, zodat de gebruiker uit een lijst kan kiezen bij het inloggen ipv nummer+klas. Of in iedergeval ook in een class zetten.


- de inlog knop moest ik wel even zoeken, die was zo ongeveer 1pixel in hoogte :D
- afbeeldingen zou ik niet zo gebruiken, maar een *.png maken zonder achtergrond. De achtergrond kleur kun je in de app instellen.
- kun je me vertellen wat de klasblok items hier zijn (die ik nu a,b,c heb genoemt)? leraar?/lokaal?/vak/? etc [se 05 WISB 9]
 
Dat van die inlog knop komt waarschijnlijk omdat ik de app voor een 720p scherm heb gemaakt.
Ik snap wel wat classes zijn, maar nog niet echt hoe ik er mee om moet gaan.
Die achergrond was ook gewoon luiheid, want dat had ik ook op kunnen zoeken, maar daar had ik even geen zin in en zo werkte die ook dusja ;p

600 regels is inderdaad en ik weet dat je het eigenlijk zo kort mogelijk moet makrn, maar daar ben ik nog niet zo goed in.

Jou laatste vraag snap ik niet helemaal
 
se 05 WISB 9

ik bedoel: WISB = het vak
is se een afkorting van een leraar? of een lokaal? (en de 05 / 9 ?)

Ik zal morgen eens van code herschrijven en in classes zetten, dan zal ik laten zien hoe je dit soort dingen kunt gebruiken. Alles zal een stuk beter leesbaar worden.
Ik zal ook wel een voorbeeld UI page maken en de layout zo maken dat het niet uitmaakt of je 720p or wat dan ook hebt.
 
Se is de afkorting van de leraar
05 is het lokaal
9 is welke groep wiskunde, omdat er meerdere groepen zijn verschillende letters per groep
 
Ok, ik ga even een versie maken. Met classes etc.

Ik zal ook de klas/namen downloaden en hopelijk zie je dan aan de hand van die voorbeelden hoe je het kunt doen.


edit:
Ik post hem vanavond dan kun je hem alvast bekijken. Daarna zal ik nog wat dingen toevoegen zoals progressbar en wat UI tweaks.
Wat alvast zal werken is de klassen/namen/rooster ophalen en de gebruiker een selectie laten maken in plaats van nummers invoeren. Kleur in rooster als er vrij is, theme kleur bij huidige uur (als voorbeeld), en starten bij 'vandaag'.
 
Laatst bewerkt:
Download

Hier is alvast het project met classes (hopelijk kun je hier wat dingen uithalen), ik ga nog wat dingen toevoegen zodat je weet dat hij aan het downloaden is etc. En dat je nog niet op de knop kan drukken als hij bezig is etc.
De meeste code die eerst bij de pagina stond staat nu in een 'viewmodel' class. En ik maak gebruik van binding om bijvoorbeeld een lijst te vullen (dat is de standaard in xaml).

in de DataService class wordt het downloaden en het parsen gedaan, wellicht dat je daar kunt kijken hoe je dingen van andere pagina's kunt downloaden.
Er zijn 3 methods die iets downloaden. (op 3G kan het downloaden even duren daarom nog even progressbar etc inbouwen)


edit:
Als je wilt kan ik het project ook op github/bitbucket zetten. Dan kun je de wijzigingen daar volgen, en bekijken/downloaden.


project op bitbucket
bij commits zie je de nieuwste wijzigingen, kunt altijd het project downloaden en bekijken in emulator. Progressbar zit er nu op de mainpage bij.
 
Laatst bewerkt:
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan