Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Browse files

Refactor and prepare algo to fetch more information

  • Loading branch information...
commit 6c8be558ecd843c921d4654b3b12c94b5b315ae4 1 parent 4d32981
Alexandre Girard authored
Showing with 77 additions and 20 deletions.
  1. +77 −20 sceance.rb
View
97 sceance.rb
@@ -1,41 +1,98 @@
require 'rubygems'
-require 'nokogiri'
+require 'hpricot'
require 'open-uri'
require 'htmlentities'
deputies = Hash.new
-def deputy_name(deputy_id)
- fiche = "http://www.assemblee-nationale.fr/13/tribun/fiches_id/#{deputy_id}.asp"
- doc = Nokogiri::HTML(open(fiche))
+#
+# Récupère les infos d'un député
+#
+# -----
+# Params:
+# options<Hash>: options pour récupèrer les infos d'un député
+# options[:legislature]<Integer>: legislature à laquelle appartient ce député (default: 13)
+# options[:deputy_id]<Integer>: identifiant du député
+#
+# -----
+# Returns:
+# <Hash>: contient les informations concerant le député trouvé sur sa fiche
+#
+def deputy_name(options = {:legislature => 13})
+
coder = HTMLEntities.new
- return coder.encode(doc.xpath('//h1[@class="titre"]').first.content, :decimal)
+ deputy = Hash.new
+
+ # XPath vers les information de la fiche
+ DEPUTY_NAME = '//h1[@class="titre"]'
+ DEPUTY_SEAT = '//div[@id="phemi"]/p'
+
+ # Récupère la fiche du député
+ fiche_url = "http://www.assemblee-nationale.fr/#{options[:legislature]}/tribun/fiches_id/#{options[:deputy_id]}.asp"
+ doc = Hpricot(open(fiche_url))
+
+ # Analyse de la fiche récupérée pour extraire les informations
+ deputy[:name] = coder.encode(doc.xpath(DEPUTY_NAME).first.content, :decimal)
+ deputy[:seat] = doc.xpath(DEPUTY_SEAT).first.content.slice(/: (\d+)/, 1)
+
+ return deputy
end
-def deputy_seat(deputy_id)
- fiche = "http://www.assemblee-nationale.fr/13/tribun/fiches_id/#{deputy_id}.asp"
- doc = Nokogiri::HTML(open(fiche))
- return doc.xpath('//div[@id="phemi"]/p').first.content.slice(/: (\d+)/, 1)
-end
-
-def parse_sceance(deputies, sceance_url)
- doc = Nokogiri::HTML(open(sceance_url))
- doc.xpath('//p/b/a[@target="_top"]').each do |link|
- deputy = link['href'].slice(/(\d+).asp/, 1)
+#
+# Récupère les infos d'un compte rendu intégral d'une scéance à l'assemblée
+#
+# -----
+# Params:
+# options<Hash>: options pour récupèrer les infos d'une scéance
+# options[:legislature]<Integer>: legislature durant laquelle à eu lieu cette scéance (défaut: 13)
+# options[:years]<String>: années durant laquelle à eu lieu cette scéance (défaut: 2008-2009)
+# options[:sceance_id]<Integer>: identifiant de cette scéance
+#
+# -----
+# Returns:
+# <Hash>: contient les informations concerant la scéance
+#
+def parse_sceance(options = {:legislature => 13, :years => "2008-2009"})
+
+ cri_url = "http://www.assemblee-nationale.fr/#{options[:legislature]}/cri/#{options[:years]}/#{options[:sceance_id]}.asp"
+
+ doc = Hpricot(open(sceance_url))
+
+ intervention = 0
+ inter_path = "a[name=INTER_#{intervention}]"
+ # Fetch <a name="INTER_#{intervention}"/>
+ while inter = doc.at(inter_path)
- if deputies.key?(deputy)
- deputies[deputy] = deputies[deputy].to_i + 1
+ word_count = 0
+
+ # Fetch speaking deputy or minister
+ speaker = inter.next
+ if deputy_link = speaker.at("a")[href]
+ deputy_id = deputy_link.slice(/(\d+).asp/, 1)
else
- deputies[deputy] = 1
+ deputy_name = speaker.inner_html
end
+
+ # Fetch his/her first work count
+ inter.following_siblings.each { |speech| word_count += speech.inner_text }
+
+ # Fetch parent and go until next a[name=INTER_
+
+
+ # Go fetch next intervention
+ intervention += 1
+ inter_path = "a[name=INTER_#{intervention}]"
end
end
-parse_sceance(deputies, "http://www.assemblee-nationale.fr/13/cri/2008-2009/20090090.asp")
+
+# http://www.assemblee-nationale.fr/13/cri/2008-2009/20090190.asp#INTER_29
+scance = parse_sceance(:sceance_id => 20090190)
deputies.sort{|a,b| b[1]<=>a[1]}.each { |elem|
- puts "#{elem[1]}, <a href='http://www.assemblee-nationale.fr/13/tribun/fiches_id/#{elem[0]}.asp'>#{deputy_name(elem[0])}</a> - Place: #{deputy_seat(elem[0])}"
+ #puts "#{elem[1]}, <a href='http://www.assemblee-nationale.fr/13/tribun/fiches_id/#{elem[0]}.asp'>#{deputy_name(elem[0])}</a> - Place: #{deputy_seat(elem[0])}"
+ puts "#{elem[1]}, #{deputy_seat(elem[0])}"
}
Please sign in to comment.
Something went wrong with that request. Please try again.