# # # File : core.py # Action : Grab Whatpulse infos # # # -*- coding: iso-8859-1 -*- import urllib from xml.dom import minidom class Whatpulse: myPage = "" myXML = "" myXMLParse = "" UserStats = "" def main ( self, userID ): self.myPage = urllib.urlopen("http://whatpulse.org/api/user.php?UserID=" + userID) self.myXML = self.myPage.read() if (self.myXML == "Unknow UserID given!"): return 2 elif (self.myXML == "No UserID given!"): return 3 else: self.xml2 = minidom.parseString(self.myXML) self.UserStats = self.xml2.firstChild def GetGeneratedDate ( self ): GeneratedStats = self.UserStats.childNodes[1] return GeneratedStats.firstChild.data def GetUserID ( self ): UserID = self.UserStats.childNodes[3] return UserID.firstChild.data def GetAccount ( self ): Account = self.UserStats.childNodes[5] return Account.firstChild.data def GetCountry ( self ): Country = self.UserStats.childNodes[7] return Country.firstChild.data def GetJoined ( self ): DateJoined = self.UserStats.childNodes[9] return DateJoined.firstChild.data def GetHomePage ( self ): Homepage = self.UserStats.childNodes[11] try: return Homepage.firstChild.data except: return "None" def GetLastPulse ( self ): LastPulse = self.UserStats.childNodes[13] return LastPulse.firstChild.data def GetPulses ( self ): NPulses = self.UserStats.childNodes[15] return NPulses.firstChild.data def GetTotalKeys ( self ): KeysTotal = self.UserStats.childNodes[17] return KeysTotal.firstChild.data def GetTotalClick ( self ): ClicksTotal = self.UserStats.childNodes[19] return ClicksTotal.firstChild.data def GetMiles ( self ): Miles = self.UserStats.childNodes[21] return Miles.firstChild.data def AvgKeyPulse ( self ): AvgKey = self.UserStats.childNodes[23] return AvgKey.firstChild.data def AvgClicksPulse ( self ): AvgClick = self.UserStats.childNodes[25] return AvgClick.firstChild.data def AvgKPS ( self ): AvgKPS = self.UserStats.childNodes[27] return AvgKPS.firstChild.data def AvgCPS ( self ): AvgCPS = self.UserStats.childNodes[29] return AvgCPS.firstChild.data def GetRank ( self ): Rank = self.UserStats.childNodes[31] return Rank.firstChild.data def CheckTeam ( self ): TeamID = self.UserStats.childNodes[33] try: isTeamID = TeamID.firstChild.data return 1 except: return 0 def GetTeamID ( self ): if (self.CheckTeam()): TeamID = self.UserStats.childNodes[33] return TeamID.firstChild.data def GetTeamName ( self ): if (self.CheckTeam()): TeamName = self.UserStats.childNodes[35] return TeamName.firstChild.data def GetTeamMem ( self ): if (self.CheckTeam()): TeamMem = self.UserStats.childNodes[37] return TeamMem.firstChild.data def GetTeamKeys ( self ): if (self.CheckTeam()): TeamKeys = self.UserStats.childNodes[39] return TeamKeys.firstChild.data def GetTeamClicks ( self ): if (self.CheckTeam()): TeamClicks = self.UserStats.childNodes[41] return TeamClicks.firstChild.data def GetTeamMiles ( self ): if (self.CheckTeam()): TeamMiles = self.UserStats.childNodes[43] return TeamMiles.firstChild.data def GetTeamDescription ( self ): if (self.CheckTeam()): Teamdesc = self.UserStats.childNodes[45] try: return Teamdesc.firstChild.data except: return "None" def GetTeamDateFormed ( self ): if (self.CheckTeam()): Teamdate = self.UserStats.childNodes[47] try: return Teamdate.firstChild.data except: return "None" def GetTeamRank ( self ): if (self.CheckTeam()): TeamRank = self.UserStats.childNodes[49] try: return TeamRank.firstChild.data except: return "None" def GetRankInTeam ( self ): if (self.CheckTeam()): RankIn = self.UserStats.childNodes[51] try: return RankIn.firstChild.data except: return "None" # # # File : main.py # Action : GUI # # # -*- coding: iso-8859-1 -*- import pygtk import array import gtk, gobject from core import Whatpulse class WPInterface: def __init__(self): self.MyGUI = gtk.Window(gtk.WINDOW_TOPLEVEL) self.MyGUI.set_title('- WhatPulse Stats - Xn') self.MyGUI.set_border_width(10) self.MyGUI.set_resizable(False) self.MyGUI.set_size_request(400,305) # Button self.MyButton = gtk.Button('Refresh') self.MyButton2 = gtk.Button('Test') # Fixed Container self.Container = gtk.Fixed() self.MyGUI.add(self.Container) # Edit self.MyEntry = gtk.Entry() self.MyEntry.set_text('195719') self.MyEntry.set_size_request(50,20) # Scrollbar self.MyScrollbar = gtk.ScrolledWindow() self.MyScrollbar.set_policy(gtk.POLICY_NEVER,gtk.POLICY_AUTOMATIC) # Treeview self.MyTreeStore = gtk.TreeView() self.MyModel= gtk.ListStore( gobject.TYPE_STRING, gobject.TYPE_STRING ) self.MyTreeStore.set_model(self.MyModel) self.MyTreeStore.set_size_request(375,245) self.MyTreeStore.set_border_width(10) self.MyRenderer1 = gtk.CellRendererText() self.MyRenderer1.set_property('width',190) self.MyRenderer1.set_property('font','bold') self.MyRenderer1.set_property('background','#d2eef8') self.MyRenderer2 = gtk.CellRendererText() self.MyRenderer2.set_property('width',150) self.MyColumn1 = gtk.TreeViewColumn('Info',self.MyRenderer1,text=0) self.MyColumn2 = gtk.TreeViewColumn('Data',self.MyRenderer2,text=1) self.MyTreeStore.append_column(self.MyColumn1) self.MyTreeStore.append_column(self.MyColumn2) # Events self.MyGUI.connect('destroy',self.WPDestroy) self.MyButton.connect('clicked',self.WPRefreshClicked) # Place them self.MyScrollbar.add(self.MyTreeStore) self.Container.put(self.MyButton,1,1) self.Container.put(self.MyEntry,50,3) self.Container.put(self.MyScrollbar,1,35) # Show ^^ self.MyEntry.grab_focus() self.MyGUI.show_all() def WPMain(self): gtk.main() def WPDestroy(self,data=None): gtk.main_quit() def WPRefreshClicked(self,widget): self.MyReq = self.MyEntry.get_text() if (self.MyReq <> ""): self.MyModel.clear() self.MyStats = Whatpulse() MyRes = self.MyStats.main(self.MyReq) if (MyRes == 2): self.MyModel.append(['Error','Unknow User ID']) elif (MyRes == 3): self.MyModel.append(['Error','Bad User ID']) else: self.MyModel.append(['Derniere Generation',self.MyStats.GetGeneratedDate()]) self.MyModel.append(['User ID',self.MyStats.GetUserID()]) self.MyModel.append(['Account Name',self.MyStats.GetAccount()]) self.MyModel.append(['Country',self.MyStats.GetCountry()]) self.MyModel.append(['Joined',self.MyStats.GetJoined()]) self.MyModel.append(['HomePage',self.MyStats.GetHomePage()]) self.MyModel.append(['Last Pulse',self.MyStats.GetLastPulse()]) self.MyModel.append(['Pulses',self.MyStats.GetPulses()]) self.MyModel.append(['Total Keys',self.MyStats.GetTotalKeys()]) self.MyModel.append(['Total Clicks',self.MyStats.GetTotalClick()]) self.MyModel.append(['Miles',self.MyStats.GetMiles()]) self.MyModel.append(['Average Key Per Pulse',self.MyStats.AvgKeyPulse()]) self.MyModel.append(['Average Click Per Pulse',self.MyStats.AvgClicksPulse()]) self.MyModel.append(['Average Keys Per Second',self.MyStats.AvgKPS()]) self.MyModel.append(['Average Clicks Per Second',self.MyStats.AvgCPS()]) self.MyModel.append(['Rank',self.MyStats.GetRank()]) if (self.MyStats.CheckTeam()): self.MyModel.append(['Team ID',self.MyStats.GetTeamID()]) self.MyModel.append(['Team Name',self.MyStats.GetTeamName()]) self.MyModel.append(['Team Members',self.MyStats.GetTeamMem()]) self.MyModel.append(['Team Keys',self.MyStats.GetTeamKeys()]) self.MyModel.append(['Team Clicks',self.MyStats.GetTeamClicks()]) self.MyModel.append(['Team Miles',self.MyStats.GetTeamMiles()]) self.MyModel.append(['Team Description',self.MyStats.GetTeamDescription()]) self.MyModel.append(['Team formed on',self.MyStats.GetTeamDateFormed()]) self.MyModel.append(['Team rank',self.MyStats.GetTeamRank()]) self.MyModel.append(['Rank in team',self.MyStats.GetRankInTeam()]) if (__name__=="__main__"): MyWP = WPInterface() MyWP.WPMain() # # # PHP Version, just for fun ^^ # Action : Same ._. # # set_title('- WhatPulse Stats -'); $this->connect_simple('destroy', array('gtk', 'main_quit')); $this->set_resizable(false); $this->set_icon($this->render_icon(Gtk::STOCK_SELECT_COLOR, Gtk::ICON_SIZE_DIALOG)); $this->Container = new GtkFixed(); // ToolBar $this->ToolBar = new GtkToolBar(); $this->ToolBar->set_show_arrow(false); $this->ToolBar->set_border_width(0); $this->ToolBouton = GtkToolButton::new_from_stock(Gtk::STOCK_REFRESH); $this->ToolBouton->connect_simple('clicked',array($this,'LoadData'),'refresh'); $this->ToolBar->insert($this->ToolBouton,-1); // Edit a coté de la ToolBar, pour actualiser ;D // ListView $this->ListView = new GtkTreeView(); $this->Model = new GtkListStore(Gtk::TYPE_STRING, Gtk::TYPE_STRING); $this->ListView->set_model($this->Model); $this->ListView->set_border_width(10); $this->ListView->set_size_request(400,200); // La séléction dans la liste - TEST - //$this->ListView->connect_simple('row-activated', array($this,'ClickList')); // Une tite ScrollBar ? :P $ScrollBar = new GtkScrolledWindow(); $ScrollBar->set_policy(Gtk::POLICY_NEVER, Gtk::POLICY_AUTOMATIC); // Renderers $RenderColumn1 = new GtkCellRendererText(); $RenderColumn1->set_property('width', 240); $RenderColumn1->set_property('font','bold'); $RenderColumn1->set_property('background','#d2eef8'); $RenderColumn2 = new GtkCellRendererText(); $RenderColumn2->set_property('width', 150); // Un edit pour l'userID $this->MyEdit = new GtkEntry('195719'); $this->MyEdit->set_size_request(50,19); // Et un label avec $ALabel = new GtkLabel('UserID :'); // Colonnes de la treeview $ListColumn1 = new GtkTreeViewColumn('Info',$RenderColumn1, 'text', 0); $ListColumn2 = new GtkTreeViewColumn('Value',$RenderColumn2, 'text', 1); $this->ListView->append_column($ListColumn1); $this->ListView->append_column($ListColumn2); $ScrollBar->add($this->ListView); $this->Container->put($ScrollBar,0,60); $this->Container->put($this->MyEdit,60,30); $this->Container->put($this->ToolBar,0,8); $this->Container->put($ALabel,61,15); $this->add($this->Container); $this->show_all(); } /*public function ClickList() { $this->Select = $this->ListView->get_selection(); list($Model,$Iter) = $this->Select->get_selected(); echo $this->Model->get_string_from_iter($Iter); $this->Model->remove($Iter); }*/ public function LoadData() { $this->UserID = $this->MyEdit->get_text(); if (!empty($this->UserID)) { if (preg_match('/^[0-9]+$/',$this->UserID)) { $this->Model->clear(); $Check = file_get_contents('http://whatpulse.org/api/user.php?UserID='.$this->UserID); if ($Check != 'Unknow UserID given!') { $xml = simplexml_load_file('http://whatpulse.org/api/user.php?UserID='.$this->UserID); $this->Model->append(array('Date de génération',$xml->GeneratedTime)); $this->Model->append(array('ID Utilisateur',$xml->UserID)); $this->Model->append(array('Nom de compte',$xml->AccountName)); $this->Model->append(array('Pays',$xml->Country)); $this->Model->append(array('Date d\'inscription',$xml->DateJoined)); $this->Model->append(array('Site internet',($xml->Homepage == '') ? 'N/A' : $xml->Homepage)); $this->Model->append(array('Derniere Pulsation',$xml->LastPulse)); $this->Model->append(array('Nombre de Pulsation',$xml->Pulses)); $this->Model->append(array('Nombre de keys total',$xml->TotalKeyCount)); $this->Model->append(array('Nombre de click total',$xml->TotalMouseClicks)); $this->Model->append(array('Nombre de miles',$xml->TotalMiles)); $this->Model->append(array('Nombre de keys moyen par pulse',$xml->AvKeysPerPulse)); $this->Model->append(array('Nombre de clicks moyen par pulse',$xml->AvClicksPerPulse)); $this->Model->append(array('Nombre moyen de keys par seconde',$xml->AvKPS)); $this->Model->append(array('Nombre moyen de clicks par seconde',$xml->AvCPS)); $this->Model->append(array('Rang Personnel',$xml->Rank)); $this->Model->append(array('ID de l\'équipe',($xml->TeamID == '') ? 'N/A' : $xml->TeamID)); $this->Model->append(array('Nom de l\'équipe',($xml->TeamName == '') ? 'N/A' : $xml->TeamName)); $this->Model->append(array('Nombre de membres',($xml->TeamMembers == '') ? 'N/A' : $xml->TeamMembers)); $this->Model->append(array('Keys de l\'équipe',($xml->TeamKeys == '') ? 'N/A' : $xml->TeamKeys)); $this->Model->append(array('Clicks de l\'équipe',($xml->TeamClicks == '') ? 'N/A' : $xml->TeamClicks)); $this->Model->append(array('Miles de l\'équipe',($xml->TeamMiles == '') ? 'N/A' : $xml->TeamMiles)); $this->Model->append(array('Description de l\'équipe',($xml->TeamDescription == '') ? 'N/A' : $xml->TeamDescription)); $this->Model->append(array('Date de création de l\'équipe',($xml->TeamDateFormed == '') ? 'N/A' : $xml->TeamDateFormed)); $this->Model->append(array('Rang de l\'équipe',($xml->TeamRank == '') ? 'N/A' : $xml->TeamRank)); $this->Model->append(array('Rang dans l\'équipe',($xml->RankInTeam == '') ? 'N/A' : $xml->RankInTeam)); } else { $this->Model->append(array('ERROR','UserID Inconnue !!')); } } else { $this->Model->append(array('ERROR','C\'est pas une UserID ça O_o')); } } else { $this->Model->append(array('ERROR','Veuillez saisir votre UserID')); } } } new GtkWhatpulse(); Gtk::main(); ?>