C# tekst van een website krijgen

Status
Niet open voor verdere reacties.
elke string heeft een Replace method
Code:
var output = input.Replace("something to replace", "replace with this");


Ik zou eens een serie zoals deze bekijken voor de basis, zoals strings, lists, classes, methods etc. Anders schiet het voor jezelf niet op als je telkens iets moet vragen. Even wat tijd investeren in het bekijken en je bespaart bakken met tijd later ;)
http://channel9.msdn.com/series/C-Fundamentals-for-Absolute-Beginners/01
 
Ja ik vind het inderdaad niet fijn als ik elke keer alles moet vragen, die serie zal ik eens bekijken :)
 
Ik heb zelf ook veel van dit soort tutorials gekeken dus kan je verzekeren dat je ervan leert, en voor de rest gewoon oefenen. Zelfs als je een keer helemaal opnieuw zou moeten beginnen met je app, daar leer je enorm veel van. ;)

Het leuke is dat als je er binnenkort een stuk meer van weet en je naar je eigen code kijkt vraag je je af waar je mee bezig was en trash je het hele project en begin je opnieuw. Heb ik ook vaak gehad :D

En het maakt niet uit als je wat moet vragen, daar is het forum ook voor.
 
als ik bij het nieuws var input = HttpUtility.HtmlDecode(output) gebruik, dan doet ie de enters niet. En als ik die niet gebruik dan wel, maar dan krijg ik alle tekens zoals  . Hoe valt dit op te lossen?
 
heb je de url met deze text? als het tussen woorden is misschien een spatie genoeg?
 
Een spatie is genoeg, maar dan moet ik httputility.decode doen en dan zijn meteen de enters uit de tekst die er zijn door de <br> . En anders moet ik replace doen, maar dat moet dan voor elk teken apart doen
 
Textboxes hebben een maximale hoogte van 2048 pixels, hoe zorg ik ervoor dat er meer tekst in kan, want nu komt er maar de helft van de tekst te staan
 
Dat is de maximale rendersize per textblock. Je zult de text moeten verdelen over meerdere blocken.
 
Maar hoe zorg ik ervoor dat een text , ik vann internet heb gehaald met xpath, in 2 textblocken komt
 
Ik heb bijvoorbeeld een text in stukken geknipt per alinea. (text opbreken bij de linebreaks)

voorbeeld snippet
Code:
var paragraphs = Regex.Split(this.Review.Content, "\r\n\r\n");

of je kunt het misschien in delen met xpath uit de source halen.
 
Het eenvoudigste om een image te laten zien is de url van de website halen en deze als de source binden. (maar wordt altijd gedownload dus kost data)

Code:
<Image Source="{Binding AlbumArtUrl}" />

Als je het naar de storage van je app wilt schrijven kun je nu nog zoiets als dit gebruiken.
Code:
public async Task<bool> SaveImageToIsolatedStorage(string imageUrl, string filename)
{
	var request = (HttpWebRequest)WebRequest.Create(imageUrl);
	var response = await request.GetResponseAsync();

	using (var stream = response.GetResponseStream())
	{
		if (stream != null)
		{
			var img = new BitmapImage();
			img.SetSource(stream);

			var file = IsolatedStorageFile.GetUserStoreForApplication();
			var fileStream = file.CreateFile(filename);

			var bmp = new WriteableBitmap(img);
			bmp.SaveJpeg(fileStream, img.PixelWidth, img.PixelHeight, 0, 100);

			return true;
		}
	}

	return false;
}
 
Voor je verder gaat...


Deze week zijn de developer tools voor het maken van WP8.1 apps vrijgegeven. Deze update zal de komende maanden op vrijwel alle WP devices verschijnen en is vooral onder de motorkap een stuk anders. Met de nieuwe tools zijn ook nieuwe 8.1 emulators en rond half april kun je wp8.1 ook als developer op jedevice zetten.

WinRT is wat gebruikt wordt voor Windows 8(.1) apps en zal ook de nieuwe standaard zijn voor apps op Windows Phone. Met de komst van wp8.1 is dit voor 90%+ dezelfde code als bij de Windows 8.1 apps (voorheen 1/3 van dat).

Bestaande WP8 apps zullen wel nog gewoon werken op WP8.1 (al weet ik zo niet of dat ook werkt met apps die je vanuit visual studio side-load op je device of dat het alleen die uit de store zijn)

Er zijn wijzigingen in bijvoorbeeld de gehele api, manifest en controls zoals deze (waarvan ik weet dat je die gebruikt)
- de Panorama pagina is vervangen door de al door Win8.1 gebruikte Hub.
- de longlistselector die je tot nu gebruikte is niet meer beschikbaar en nu gebruik je een listview/gridview (data templates en bijna alle xaml is over het algemeen gewoon te gebruiken).
- navigatie tussen pagina's (fijner dan de huidige standaard manier)

dingen zoals background tasks, toast notifications etc. en als je gebruik wilt maken van de nieuwe 8.1 features zul je ook moeten overstappen.

Met de nieuwe tools zijn ook nieuwe 8.1 emulators en rond half april kun je wp8.1 ook op je device zetten.


Je kunt nog gewoon verder gaan met wat je nu doet maar ik zou alvast eens de nieuwe tools downloaden en een kijkje nemen. Ook kun je dan alvast eens met de nieuwe wp8.1 features spelen :p





En dan voorbeeld code om in te loggen: (WP8)
(als je nog even de website kunt zeggen waar je wilt inloggen, sommige dingen zijn dus bij elke website anders)


Om te kunnen inloggen zou ik eerst een class maken waar je wat info kunt opslaan over de gebruiker en de cookies:
[CPP]public class Account
{
private readonly CookieCollection _cookieCollection;

public Account(CookieCollection cookieCollection, string uniqueId)
{
_cookieCollection = cookieCollection;
this.UniqueId = uniqueId;
}

public string UniqueId { get; private set; }

public CookieCollection GetCookies()
{
return _cookieCollection;
}

public override string ToString()
{
return string.Format("Account: {0}", UniqueId);
}
}[/CPP]

En een class waar je de method maakt om in te loggen:
[CPP]public class AuthenticationService
{
public async Task<Account> Authenticate(string username, string password)
{
const string url = "http://www.website.com/login.html/ofzoiets";

var request = WebRequest.CreateHttp(url);
request.Method = "POST";
request.ContentType = "application/x-www-form-urlencoded";
request.CookieContainer = new CookieContainer();

var post = string.Format("username={0}&password={1}", username, password); //voorbeeld postdata
var postBytes = Encoding.UTF8.GetBytes(post);

request.ContentLength = postBytes.Length;

var requestStream = await request.GetRequestStreamAsync();
requestStream.Write(postBytes, 0, postBytes.Length);
requestStream.Close();

await request.GetResponseAsync();
//if source page is needed, you can read it instead of just looking at the returned cookies

var cookieCollection = request.CookieContainer.GetCookies(new Uri(url));
var userIdCookie = cookieCollection["uid"]; // voorbeeld van site waar ik mee test

return userIdCookie == null ? null : new Account(cookieCollection, userIdCookie.Value);
}
}[/CPP]
Om de post datastring te achterhalen heb ik in de browser een developer tab open gezet en daar kon ik zien wat er nodig was. ook zou je met bv. wireshark de packets kunnen sniffen voor de website. (Dit is bij elke pagina anders.)




en de usage:
[CPP]var service = new AuthenticationService();
var account = await service.Authenticate("username", "password");

if (account != null)
{
MessageBox.Show(account.ToString(), "Authenticated", MessageBoxButton.OK);
}
else
{
MessageBox.Show("You have provided an invalid username or password.\r\n\r\nPlease try again.", "Authentication Failed!", MessageBoxButton.OK);
}[/CPP]




ik maak ook gebruik van deze async extension method: (dit is ook iets wat allemaal in WP8.1 kant en klaar zit ;))
[CPP]public static Task<Stream> GetRequestStreamAsync(this HttpWebRequest request)
{
var taskComplete = new TaskCompletionSource<Stream>();
request.BeginGetRequestStream(asyncResponse =>
{
try
{
var responseRequest = (HttpWebRequest)asyncResponse.AsyncState;
var someResponse = responseRequest.EndGetRequestStream(asyncResponse);
taskComplete.TrySetResult(someResponse);
}
catch (WebException)
{
taskComplete.TrySetResult(null);
}
}, request);
return taskComplete.Task;
}[/CPP]


nadat je een account variable hebt kun je de cookies daarin gebruiken bij elk request (waar in de authenticate method alleen een nieuwe wordt aangemaakt)
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan