Seiten
Zuletzt im Ohr
Zuletzt im Sinn
Archiv
- März 2010 (6)
- Februar 2010 (3)
- Dezember 2009 (2)
- November 2009 (3)
- Oktober 2009 (17)
- September 2009 (7)
- August 2009 (7)
- Juli 2009 (3)
- Juni 2009 (2)
- Mai 2009 (4)
- April 2009 (1)
- März 2009 (3)
- Februar 2009 (11)
- Januar 2009 (14)
- Dezember 2008 (6)
- November 2008 (9)
- Oktober 2008 (6)
- September 2008 (9)
Tagcloud
Partner/Links
- gb-pix.de - Gästebuchbilder, Jappy, MySpace…
- Gratis SMS - Kostenlos ohne Anmeldung SMS verschicken
- icq-tools - Viele Tools für ICQ!
- Kostenlose Browsergames - Kostenlose Browsergames
- Servervoice Blog - Servervoice Blog
- Wordpress Theme
Network
2 Klassen für den schnellen Zugriff auf ipcounter.de
Dieser Artikel dient nur zu Anschaungszwecken. Der vorgestellte Code funktioniert nicht mehr! Eine neue, funktionierende Version gibt es hier!
Heute gibt’s mal wieder was für die C#’ler unter meinen Lesern.
Der ein oder andere von euch kennt vielleicht den Counterservice www.ipcounter.de.
Da ich auf 2-3 Homepages diesen Service in Anspruch nehme und keine Lust habe immer alle Statistikseiten einzeln aufzurufen, habe ich 2 Klassen gebastelt, mit denen es möglich ist diverse Infos auszulesen.
Diese könnt ihr dann für eure eigenen Programm weiter verwenden. Das könnt dann zum Beispiel so aussehen (zum Vergrößern bitte anklicken!):
Die Verwendung ist simpel und eigentlich selbsterklärend. (Deshalb werde ich auch nur kurz darauf eingehen. Bei Fragen gilt wie immer – Kommentar schreiben, oder Kontaktformular benutzen.)
Verwendung der Klassen:
1. Klasse aufrufen und “Anzahl der Versuche” übergeben. (Manchmal gibt es MySQL-Errors auf IPcounter, dann klappt das auslesen natürlich nicht. Für diesen Fall kann man angeben wie oft bei einem Fehler versucht werden soll die Statistikdaten erneut abzurufen.)
[sourcecode language="csharp"] IpCounter ipc = new IpCounter(3); [/sourcecode]
2. Daten auslesen. (Beim Aufruf immer die ID, welche Ihr der Url eures Counters entnehmen könnt, mitgeben!)
[sourcecode language="csharp"]
// Befüllt & konfiguriert das übergebene dataGridView mit den Statistikdaten der letzten 30 Tage
ipc.Last30DaysGridView(dataGridView1, IPcounter_ID);
// Alternativ kann das ganze auch als DataTable zurückgegeben werden,
// welche Ihr später immernoch an ein dataGridView binden könnt.
dataGridView1.DataSource = ipc.Last30DaysDataTable(IPcounter_ID);
// Gibt die Statistikdaten der letzten Tage, als StringArray zurück
string[] LastDays = ipc.Last30Days(IPcounter_ID);
// Gibt die Anzahl der Online User als string zurück
string OnlineUsers = ipc.OnlineUsers(IPcounter_ID);
// Gibt die Anzahl aller Seitenaufrufe als String zurück
string HitsGesamt = ipc.AllHits(IPcounter_ID);
// Gibt die Anzahl aller eindeutigen Besucher als string zurück
string UniqueVisits = ipc.AllUniqueVisitors(IPcounter_ID);
// Die einzelnen Werte werden als Strings zurückgegeben,
// da zur Trennung (Stichwort: Tausender-Trennung)
// teils Punkte verwendet werden.
// Wenn ein INT-Wert gewünscht wird, einfach wie folgt vorgehen:
int OnlineUsers = Convert.ToInt32(ipc.OnlineUsers(IPcounter_ID).Replace(".",""));
[/sourcecode]
Die Klassen (Download am Ende des Posts):
IPcounter.cs
[sourcecode language="csharp"]
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Text.RegularExpressions;
using System.IO;
using System.Net;
using System.Windows.Forms;
using System.Data;
namespace MyStats
{
class IpCounter
{
string html = string.Empty;
int ErrorTry;
int Trys = 0;
public IpCounter(int AnzahlVersuche)
{
this.ErrorTry = AnzahlVersuche;
}
public string OnlineUsers(int id)
{
try
{
HttpWebRequest req = (HttpWebRequest)HttpWebRequest.Create("http://www.ipcounter.de/stats.php?u=" + id.ToString());
HttpWebResponse res = (HttpWebResponse)req.GetResponse();
StreamReader sr = new StreamReader(res.GetResponseStream());
html = sr.ReadToEnd();
sr.Close();
sr.Dispose();
res.Close();
RegExSolve Solver = new RegExSolve(html);
string[] ActualItems = Solver.StatsOnline();
return ActualItems[0].Remove(0, 102);
}
catch
{
Trys++;
if (Trys < ErrorTry)
{
OnlineUsers(id);
return "error";
}
else
{
Trys = 0;
return "error";
}
}
}
public string AllHits(int id)
{
try
{
HttpWebRequest req = (HttpWebRequest)HttpWebRequest.Create("http://www.ipcounter.de/stats.php?u=" + id.ToString());
HttpWebResponse res = (HttpWebResponse)req.GetResponse();
StreamReader sr = new StreamReader(res.GetResponseStream());
html = sr.ReadToEnd();
sr.Close();
sr.Dispose();
res.Close();
RegExSolve Solver = new RegExSolve(html);
string[] SeitenAufrufe = Solver.StatsAll();
SeitenAufrufe[0] = SeitenAufrufe[0].Remove(0, 89);
if (SeitenAufrufe[0].Contains("
") == true)
{
SeitenAufrufe[0] = SeitenAufrufe[0].Replace("
", "");
}
return SeitenAufrufe[0];
}
catch
{
Trys++;
if (Trys < ErrorTry)
{
AllHits(id);
return "error";
}
else
{
Trys = 0;
return "error";
}
}
}
public string AllUniqueVisitors(int id)
{
try
{
HttpWebRequest req = (HttpWebRequest)HttpWebRequest.Create("http://www.ipcounter.de/stats.php?u=" + id.ToString());
HttpWebResponse res = (HttpWebResponse)req.GetResponse();
StreamReader sr = new StreamReader(res.GetResponseStream());
html = sr.ReadToEnd();
sr.Close();
sr.Dispose();
res.Close();
RegExSolve Solver = new RegExSolve(html);
string[] SeitenAufrufe = Solver.StatsUniqueAll();
SeitenAufrufe[0] = SeitenAufrufe[0].Remove(0, 106);
if (SeitenAufrufe[0].Contains("
") == true)
{
SeitenAufrufe[0] = SeitenAufrufe[0].Replace("
", "");
}
return SeitenAufrufe[0];
}
catch
{
Trys++;
if (Trys < ErrorTry)
{
AllUniqueVisitors(id);
return "error";
}
else
{
Trys = 0;
return "error";
}
}
}
public string[] Last30Days(long id)
{
string[] error = new string[1];
error[0] = "error";
try
{
HttpWebRequest req = (HttpWebRequest)HttpWebRequest.Create("http://www.ipcounter.de/stats.php?u=" + id.ToString() + "&a=balken");
HttpWebResponse res = (HttpWebResponse)req.GetResponse();
StreamReader sr = new StreamReader(res.GetResponseStream());
html = sr.ReadToEnd();
sr.Close();
sr.Dispose();
res.Close();
}
catch
{
Trys++;
if (Trys < ErrorTry)
{
Last30Days(id);
return error;
}
else
{
Trys = 0;
return error;
}
}
RegExSolve Solver = new RegExSolve(html);
string[] Days = Solver.Stats30Days();
if (Days.Length != 128)
{
Trys++;
if (Trys < ErrorTry)
{
Last30Days(id);
return error;
}
else
{
Trys = 0;
return error;
}
}
else
{
int count = 0;
foreach (string item in Days)
{
Days[count] = item.Replace("<strong>", "").Replace("</strong>", "").Replace(" ", "").Replace("
", "").Replace(" ", "").Replace(" ", "").Replace(" ", ""); ;
count++;
}
Trys = 0;
return Days;
}
}
public DataTable Last30DaysDataTable(long id)
{
DataTable Stats = new DataTable("30TageRueckblick");
DataColumn[] ipcColumns = new DataColumn[4];
ipcColumns[0] = new DataColumn("Tag");
ipcColumns[1] = new DataColumn("Datum");
ipcColumns[2] = new DataColumn("UniqueVisits");
ipcColumns[3] = new DataColumn("Hits");
Stats.Columns.AddRange(ipcColumns);
try
{
HttpWebRequest req = (HttpWebRequest)HttpWebRequest.Create("http://www.ipcounter.de/stats.php?u=" + id.ToString() + "&a=balken");
HttpWebResponse res = (HttpWebResponse)req.GetResponse();
StreamReader sr = new StreamReader(res.GetResponseStream());
html = sr.ReadToEnd();
sr.Close();
sr.Dispose();
res.Close();
}
catch
{
Trys++;
if (Trys < ErrorTry)
{
Last30Days(id);
Stats.Reset();
ipcColumns = new DataColumn[4];
ipcColumns[0] = new DataColumn("Wochentag");
ipcColumns[1] = new DataColumn("Datum");
ipcColumns[2] = new DataColumn("UniqueVisits");
ipcColumns[3] = new DataColumn("Hits");
Stats.Columns.AddRange(ipcColumns);
DataRow dr = Stats.NewRow();
dr[0] = "Error";
dr[1] = "Error";
dr[2] = "Error";
dr[3] = "Error";
return Stats;
}
else
{
Trys = 0;
Stats.Reset();
ipcColumns = new DataColumn[4];
ipcColumns[0] = new DataColumn("Wochentag");
ipcColumns[1] = new DataColumn("Datum");
ipcColumns[2] = new DataColumn("UniqueVisits");
ipcColumns[3] = new DataColumn("Hits");
Stats.Columns.AddRange(ipcColumns);
DataRow dr = Stats.NewRow();
dr[0] = "Error";
dr[1] = "Error";
dr[2] = "Error";
dr[3] = "Error";
return Stats;
}
}
RegExSolve Solver = new RegExSolve(html);
string[] Days = Solver.Stats30Days();
if (Days.Length != 128)
{
Trys++;
if (Trys < ErrorTry)
{
Last30Days(id);
Stats.Reset();
ipcColumns = new DataColumn[4];
ipcColumns[0] = new DataColumn("Wochentag");
ipcColumns[1] = new DataColumn("Datum");
ipcColumns[2] = new DataColumn("UniqueVisits");
ipcColumns[3] = new DataColumn("Hits");
Stats.Columns.AddRange(ipcColumns);
DataRow dr = Stats.NewRow();
dr[0] = "Error";
dr[1] = "Error";
dr[2] = "Error";
dr[3] = "Error";
return Stats;
}
else
{
Trys = 0;
Stats.Reset();
ipcColumns = new DataColumn[4];
ipcColumns[0] = new DataColumn("Wochentag");
ipcColumns[1] = new DataColumn("Datum");
ipcColumns[2] = new DataColumn("UniqueVisits");
ipcColumns[3] = new DataColumn("Hits");
Stats.Columns.AddRange(ipcColumns);
DataRow dr = Stats.NewRow();
dr[0] = "Error";
dr[1] = "Error";
dr[2] = "Error";
dr[3] = "Error";
return Stats;
}
}
else
{
int count = 0;
while (count < 128)
{
string item1 = Days[count].Replace("<strong>", "").Replace("</strong>", "").Replace(" ", "").Replace("
", "").Replace(" ", "").Replace(" ", "").Replace(" ", ""); ;
string item2 = Days[count + 1].Replace("<strong>", "").Replace("</strong>", "").Replace(" ", "").Replace("
", "").Replace(" ", "").Replace(" ", "").Replace(" ", ""); ;
string item3 = Days[count + 2].Replace("<strong>", "").Replace("</strong>", "").Replace(" ", "").Replace("
", "").Replace(" ", "").Replace(" ", "").Replace(" ", ""); ;
string item4 = Days[count + 3].Replace("<strong>", "").Replace("</strong>", "").Replace(" ", "").Replace("
", "").Replace(" ", "").Replace(" ", "").Replace(" ", ""); ;
DataRow datrow = Stats.NewRow();
datrow[0] = item1;
datrow[1] = item2;
datrow[2] = item3;
datrow[3] = item4;
Stats.Rows.Add(datrow);
count = count + 4;
}
Trys = 0;
return Stats;
}
}
public void Last30DaysGridView(DataGridView datagridview_name, long IPcounterID)
{
datagridview_name.Rows.Clear();
string[] StatsTage = Last30Days(IPcounterID);
if (datagridview_name.ColumnCount != 4 || datagridview_name.Columns[0].HeaderText != "Tag" || datagridview_name.Columns[1].HeaderText != "Datum" || datagridview_name.Columns[2].HeaderText != "Unique" || datagridview_name.Columns[3].HeaderText != "Hits")
{
datagridview_name.Columns.Clear();
datagridview_name.Columns.Add("Tage", "Tag");
datagridview_name.Columns.Add("Datum", "Datum");
datagridview_name.Columns.Add("Unique", "Unique");
datagridview_name.Columns.Add("Hits", "Hits");
}
datagridview_name.AllowUserToAddRows = false;
datagridview_name.AllowUserToDeleteRows = false;
datagridview_name.AllowUserToResizeColumns = false;
datagridview_name.AllowUserToResizeRows = false;
datagridview_name.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.ColumnHeader;
datagridview_name.BorderStyle = BorderStyle.Fixed3D;
datagridview_name.ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.DisableResizing;
datagridview_name.MultiSelect = false;
datagridview_name.ReadOnly = true;
datagridview_name.ScrollBars = ScrollBars.Vertical;
datagridview_name.SelectionMode = DataGridViewSelectionMode.FullRowSelect;
datagridview_name.ShowCellToolTips = false;
datagridview_name.ShowEditingIcon = false;
if (StatsTage[0] != "error")
{
int typec = 1;
int rowc = 0;
datagridview_name.Rows.Add();
foreach (string item in StatsTage)
{
if (typec == 5)
{
datagridview_name.Rows.Add();
typec = 1;
rowc++;
}
if (typec == 1)
{
datagridview_name.Rows[rowc].Cells[0].Value = item;
}
if (typec == 2)
{
datagridview_name.Rows[rowc].Cells[1].Value = item;
}
if (typec == 3)
{
datagridview_name.Rows[rowc].Cells[2].Value = item;
}
if (typec == 4)
{
datagridview_name.Rows[rowc].Cells[3].Value = item;
}
typec++;
}
}
else
{
datagridview_name.Columns.Clear();
datagridview_name.Columns.Add("Tage", "Error");
datagridview_name.Columns.Add("Datum", "Error");
datagridview_name.Columns.Add("Unique", "Error");
datagridview_name.Columns.Add("Hits", "Error");
}
}
}
}
[/sourcecode]
RegExSolve.cs
[sourcecode language="csharp"]
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Text.RegularExpressions;
namespace MyStats
{
class RegExSolve
{
string HTML;
public RegExSolve(string html)
{
this.HTML = html;
}
public string[] StatsOnline()
{
Regex RegExPattern = new Regex(@"(( Online:
\n <strong>)+[0-9]+)");
MatchCollection ResultCollection = RegExPattern.Matches(this.HTML);
string[] Results = new string[ResultCollection.Count];
for (int x = 0; x < ResultCollection.Count; x++)
Results[x] = ResultCollection[x].ToString();
return Results;
}
public string[] StatsAll()
{
Regex RegExPattern = new Regex(@"(( Seitenaufrufe:
\n <strong>)+(.)*[0-9]+(.)*)");
MatchCollection ResultCollection = RegExPattern.Matches(this.HTML);
string[] Results = new string[ResultCollection.Count];
for (int x = 0; x < ResultCollection.Count; x++)
Results[x] = ResultCollection[x].ToString();
return Results;
}
public string[] StatsUniqueAll()
{
Regex RegExPattern = new Regex(@"(( Besucher:
\n <strong>)+(.)*[0-9]+(.)*)");
MatchCollection ResultCollection = RegExPattern.Matches(this.HTML);
string[] Results = new string[ResultCollection.Count];
for (int x = 0; x < ResultCollection.Count; x++)
Results[x] = ResultCollection[x].ToString();
return Results;
}
public string[] Stats30Days()
{
Regex RegExPattern = new Regex(@"((( )+((Mo,)|(Di,)|(Mi,)|(Do,)|(Fr,)|(<strong>Sa</strong>,)|(<strong>So</strong>,))+(
)+)|(( )+[0-9.]+(
)+)|(( )+[0-9.]+(
)+)|(( )+[0-9.]+(
)+))");
MatchCollection ResultCollection = RegExPattern.Matches(this.HTML);
string[] Results = new string[ResultCollection.Count];
for (int x = 0; x < ResultCollection.Count; x++)
Results[x] = ResultCollection[x].ToString();
return Results;
}
}
}
[/sourcecode]
Download der Klassen:
Fragen? Probleme? Kommentar schreiben!
Liebe Grüße,
euer Raffi
Ähnliche Artikel:
Hallo!

Kategorien
- Der tägliche Senf… (78)
- Informatik (81)
- C# & .net Framework (15)
- Cheat Sheets (4)
- HTML, PHP, etc. (5)
- Neuigkeiten (27)
- Software-Projekte (34)
- Tipps & Tricks (29)
- Musik (4)
- Downloads (3)
- Hörbar – Raffis Musiktipp (4)
- Videoclips (4)
- Schule (11)
Kalendar
| M | D | M | D | F | S | S |
|---|---|---|---|---|---|---|
| « Feb | Apr » | |||||
| 1 | ||||||
| 2 | 3 | 4 | 5 | 6 | 7 | 8 |
| 9 | 10 | 11 | 12 | 13 | 14 | 15 |
| 16 | 17 | 18 | 19 | 20 | 21 | 22 |
| 23 | 24 | 25 | 26 | 27 | 28 | 29 |
| 30 | 31 | |||||
Counter
| Besucherstatistik | |
| Besucher gesamt: | 113.666 |
| Besucher heute: | 135 |
| Besucher gestern: | 366 |
| Max. Besucher pro Tag: | 629 |
| gerade online: | 4 |
| max. online: | 89 |
| Seitenaufrufe gesamt: | 286.958 |
| Seitenaufrufe diese Seite: | 1.555 |
| Counterstart: | 13.10.2008 |
Meta
Am meisten kommentiert
Neue Artikel
- Hinter den Kulissen dieses Blogs…
- Update: Webmusix 1.3.6
- C# – Webbrowser Control: Popups blocken
- Generierung von FullFeeds = Contentklau?
- Cebit 2010 – ein kurzer Rückblick
- Umzug abgeschlossen – neuer Webspace, neues Glück?
- Hörbar – Raffis Musiktipp #4
- Da tut sich was…
- Update: Webmusix 1.3.5
- MultiVZ Tools – der Untergang Teil 2
Neue Kommentare
- CONeal: Also ich vermute, dass die Session nicht aufrecht erhalten wird, denn den selben CookieContainer verwende ich...
- Rudi: Finde die Idee grundsätzlich wirklich super! Gehe aber auch davon aus, dass dies rechtlich nicht ganz...
- Raffi: Erstmal Danke für deinen Kommentar und jaa – das SSD Raid geht ab wie Hölle!
Eine Frage noch. Was... - Raffi: Wenn du danach an keine internen Seiten kommst, war entweder: a. der Login nicht erfolgreich b. wurde die...
- Master_Ipse: hmmm das mit “2×32GB OCZ Vertex SSD im Raid 0″ hört sich geil an
und nen bissel...
net-blog.net © 2008-2010





2 Benutzer kommentierten "C# IPcounter.de API"
05 Mai 2009 um 19:10:36
Dankesehr f+ür den ipocounter code
27 September 2009 um 23:56:28
[...] einiger Zeit hatte ich schon mal einen Artikel verfasst, der sich damit beschäftige, wie man ohne großen Aufwand, dank zwei kleiner Klassen, mit [...]