Advertisement
Guest User

Untitled

a guest
May 22nd, 2017
76
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 7.11 KB | None | 0 0
  1.  
  2. # -*- coding: utf-8 -*-
  3. # P2B: Les réseaux sociaux en entreprise
  4. # Valentin Honoré et Gabriel Urbain
  5. # Avril 2010
  6. #
  7. # Développpement d'outils d'exploitation de données récupérées sur twitter
  8. # Utilisation du module python-twitter pour l'exploitation de données provenant de twitter en format Json (Java-script Object Notation)
  9.  
  10.  
  11.  
  12. import twitter
  13. import datetime
  14.  
  15.  
  16. #--------------------------------------------------------------------------------------
  17.  
  18.  
  19. class date:
  20.    
  21.     "Class developped to exploit a string date in 30 characters from twitter"
  22.    
  23.     monthtxt = ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"]
  24.     day = 0
  25.     month = 0
  26.     year = 0
  27.     serie = datetime.date(2010, 04, 12)
  28.     txt = ""
  29.    
  30.     #################################################################################
  31.    
  32.     def __init__ (self, texte):
  33.        
  34.         self.txt = texte
  35.         self.day = int(self.txt[8:10])
  36.         i = 0
  37.         while i < 12:
  38.             if self.monthtxt[i] == self.txt[4:7] :
  39.                 self.month = i + 1
  40.                 break;
  41.             i = i + 1
  42.         self.year = int(self.txt[26:30])
  43.         self.serie = datetime.date(self.year, self.month, self.day)
  44.        
  45.     #################################################################################
  46.        
  47.     def GetSerie (self):
  48.         return self.serie
  49.        
  50.     #################################################################################  
  51.        
  52.     def GetDay (self):
  53.         return self.day
  54.  
  55.     #################################################################################
  56.  
  57.     def GetMonth (self):
  58.         return self.month
  59.        
  60.     #################################################################################
  61.        
  62.     def GetYear (self):
  63.         return self.year
  64.        
  65.        
  66. #--------------------------------------------------------------------------------------
  67.        
  68.        
  69. class dataUse:
  70.  
  71.     "Class with some methods to get twitter datas and some others to exploit them"
  72.    
  73.     FILENAME = "Resultat.txt"
  74.     DEFAULT = "Default"
  75.     USER = "be_rail"
  76.     COUNT = 200
  77.     TIMEGAP = 2
  78.    
  79.     #################################################################################
  80.    
  81.     def __init__(self, name, password):
  82.        
  83.         "Constructor"
  84.        
  85.         self.api = twitter.Api(username = name, password = password)
  86.                
  87.     ##################################################################################
  88.    
  89.     def Display (self, usertype = "f", user = USER, nbre = COUNT):
  90.        
  91.         "Display all the statuses of the concerned user. Use f for friends, p for public and u for particular users"
  92.        
  93.         # Declaration
  94.         if user == ("f" or None):
  95.             statuses = self.api.GetFriendsTimeline(count = self.COUNT)
  96.         elif user == "p":
  97.             statuses = self.api.GetPublicTimeline(count = self.COUNT)
  98.         elif user == "u":
  99.             statuses = self.api.GetUserTimeline(user = user, count = self.COUNT)   
  100.         j = 0
  101.        
  102.         # Display
  103.         while j < nbre:
  104.             print "Tweet %u)" %(j+1)
  105.             print "De: " + statuses[j].user.name
  106.             print "Date: " + statuses[j].GetCreatedAt()
  107.             print "Message: " + statuses[j].text + "\n\n"
  108.            
  109.     #################################################################################
  110.    
  111.     def Sending (self, msg = DEFAULT):
  112.        
  113.         "Post a tweet on the selectioned account"
  114.         api.PostUpdate(msg)
  115.        
  116.     #################################################################################
  117.  
  118.     def TimeExploit (self, user = USER, gap = TIMEGAP, filedest = FILENAME):
  119.        
  120.         "Write the nummer of posts in each intervals of one gap of days in filedest"
  121.        
  122.         # Declaration
  123.         i=0
  124.         j=0
  125.         tab = []
  126.         moyenne = [0]
  127.         statuses = self.api.GetUserTimeline(user = user, count = self.COUNT)
  128.        
  129.         # work out the number of points
  130.         statuses.reverse()
  131.         deltajours = (date(statuses[i-1].GetCreatedAt()).GetSerie() - date(statuses[0].GetCreatedAt()).GetSerie())
  132.         nbrepoints = deltajours.days/gap
  133.         print "Le delta de temps vaut %(a)u et il y a %(b)u intervalles de %(c)u jours" \
  134.         %{'a': deltajours.days, 'b': nbrepoints, 'c': gap}
  135.  
  136.         # initialize tab chart
  137.         for i in range(deltajours.days):
  138.             tab.append(0)
  139.        
  140.         # implement the chart if needed
  141.         for status in statuses:        
  142.             tab[(date(status.GetCreatedAt()).GetSerie() - date(statuses[0].GetCreatedAt()).GetSerie()).days - 1] = \
  143.             tab[(date(status.GetCreatedAt()).GetSerie() - date(statuses[0].GetCreatedAt()).GetSerie()).days - 1] + 1
  144.        
  145.         # work out the value during a gap of days
  146.         for i in range(deltajours.days):
  147.             moyenne[j] = moyenne[j] + tab[i]
  148.             if i%gap == 0:
  149.                 j = j + 1
  150.                 moyenne.append(0)  
  151.                
  152.         # write text and datas
  153.         ff = open (filedest, 'w')      
  154.         ff.write("Nombre de fois ou un tweet a ete poste :\n\nNombre\t\tDate\n\n")
  155.         d = datetime.timedelta(days=gap)
  156.         i = 1
  157.         for value in moyenne :
  158.             borne = date(statuses[0].GetCreatedAt()).GetSerie() + i * d
  159.             texte = "%(a)u\t\t %(b)u/%(c)u/%(d)u\t\t%(e)u\n" \
  160.             %{'a': i, 'b': borne.day, 'c': borne.month, 'd': borne.year, 'e': value}
  161.             ff.write (texte)
  162.             i = i + 1
  163.         ff.close()
  164.    
  165.     ##################################################################################
  166.    
  167.     def Search (self, user = USER, gap = TIMEGAP, txt = DEFAULT, filedest = FILENAME):
  168.        
  169.         "Search the text txt in all post and write it with the date in filedest"
  170.        
  171.         # Declaration
  172.         i=0
  173.         j=0
  174.         tab = []
  175.         moyenne = [0]
  176.         statuses = self.api.GetUserTimeline(user = user, count = self.COUNT)
  177.        
  178.         # work out the number of points
  179.         statuses.reverse()
  180.         deltajours = (date(statuses[i-1].GetCreatedAt()).GetSerie() - date(statuses[0].GetCreatedAt()).GetSerie())
  181.         nbrepoints = deltajours.days/gap
  182.         print "Le delta de temps vaut %(a)u et il y a %(b)u intervalles de %(c)u jours" \
  183.         %{'a': deltajours.days, 'b': nbrepoints, 'c': gap}
  184.        
  185.         # initialize the tab chart
  186.         for i in range(deltajours.days):
  187.             tab.append(0)
  188.        
  189.         # implement the chart if needed
  190.         for status in statuses:        
  191.             text = status.text
  192.             datum = date (status.GetCreatedAt())
  193.             if ( text.find(txt) > 0 ):
  194.                 tab[(date(status.GetCreatedAt()).GetSerie() - date(statuses[0].GetCreatedAt()).GetSerie()).days - 1] = \
  195.                 tab[(date(status.GetCreatedAt()).GetSerie() - date(statuses[0].GetCreatedAt()).GetSerie()).days - 1] + 1
  196.                 j = j + 1
  197.         print "Le mot \"" + txt + "\" a ete trouve %u fois dans les tweets" %j
  198.                
  199.         # work out the value during a gap of days
  200.         j = 0
  201.         for i in range(deltajours.days):
  202.             moyenne[j] = moyenne[j] + tab[i]
  203.             if i%gap == 0:
  204.                 j = j + 1
  205.                 moyenne.append(0)  
  206.                
  207.         # write text and datas
  208.         ff = open (filedest, 'w')      
  209.         ff.write("Nombre de fois ou "+txt+" a ete trouve :\n\nNombre\t\tDate\n\n")
  210.         d = datetime.timedelta(days=gap)
  211.         i = 1
  212.         for value in moyenne :
  213.             borne = date(statuses[0].GetCreatedAt()).GetSerie() + i * d
  214.             texte = "%(a)u\t\t %(b)u/%(c)u/%(d)u\t\t%(e)u\n"  \
  215.             %{'a': i, 'b': borne.day, 'c': borne.month, 'd': borne.year, 'e': value}
  216.             ff.write (texte)
  217.             i = i + 1
  218.         ff.close()
  219.        
  220.         return j
  221.        
  222.        
  223. #--------------------------------------------------------------------------------------
  224.  
  225. session = dataUse('gabs48', 'XXX')
  226. session.TimeExploit (user = 'be_rail', gap = 15, filedest = 'resultat1.txt')
  227. session.Search (user = 'be_rail', gap = 15, txt = 'retard', filedest = 'resultat2.txt')
  228. session.Search (user = 'be_rail', gap = 15, txt = 'accident', filedest = 'resultat3.txt')
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement