public
Description: Tool to generate dot file based on wikipedia usage
Clone URL: git://github.com/schleyfox/wikimapper.git
made system suck less

* still uglier than Fergie on a rainy day, but its a hack
schleyfox (author)
Fri Apr 25 12:20:32 -0700 2008
commit  12ce186cad3ea86a155bea7d568b7b7c7a653d0c
tree    4ff6d591626f91ebad68e7dd869b415734bd86c0
parent  39fb97341aa4081c5d1473c2d9d48cbc1aadc396
0
...
11
12
13
14
 
15
16
17
 
...
11
12
13
 
14
15
 
 
16
0
@@ -11,7 +11,6 @@ Usage:
0
 install wiki_mapper.user.js into greasemonkey
0
 ruby wiki_log.rb
0
 
0
-when you want output, go to http://localhost:9999/?exit=1
0
+when you want output, go to http://localhost:9999/show
0
 
0
-there will now be a file called wiki_map.dot and it can be abused in the usual
0
-ways.
0
+The program handles db creation and maintenance on its own
...
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
32
33
34
 
 
35
36
37
...
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
32
33
34
35
36
37
38
39
40
 
 
 
 
 
 
41
42
43
44
 
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
 
68
 
69
70
71
72
73
0
@@ -1,37 +1,73 @@
0
 require 'rubygems'
0
 require 'mongrel'
0
 require 'logger'
0
+require 'active_record'
0
 
0
-def stripdot(txt)
0
- CGI::unescape(txt).gsub(/[^A-Za-z0-9_]/, '_')
0
+$db_name = 'wiki_dot.db'
0
+$dot_fn = 'wiki_map.tmp.dot'
0
+$png_fn = 'wiki_map.tmp.png'
0
+
0
+if !File.exists? $db_name
0
+ require 'sqlite3'
0
+ db = SQLite3::Database.new($db_name)
0
+ db.execute %q{
0
+ CREATE TABLE lines(
0
+ id INTEGER PRIMARY KEY,
0
+ created_at DATETIME,
0
+ line TEXT);
0
+ }
0
+ db.close
0
 end
0
 
0
-$file = File.open("wiki_map.dot", "w")
0
 
0
-class HeaderHandler < Mongrel::HttpHandler
0
 
0
+ActiveRecord::Base.establish_connection({ :adapter => 'sqlite3',
0
+ :dbfile => $db_name})
0
+
0
+class Line < ActiveRecord::Base
0
+end
0
+
0
+
0
+def stripdot(txt)
0
+ CGI::unescape(txt).gsub(/[^A-Za-z0-9_]/, '_')
0
+end
0
 
0
+
0
+class WikiLoggerHandler < Mongrel::HttpHandler
0
   def process(request,response)
0
     response.start(200) do |head, out|
0
       head["Content-Type"] = "text/plain"
0
       vars = Mongrel::HttpRequest.query_parse(request.params['QUERY_STRING'])
0
- if vars['exit'] == '1'
0
- $file.puts '}'
0
- $file.close
0
- exit!
0
- elsif vars['single']
0
- $file.puts " #{stripdot vars['single']};"
0
+
0
+ if vars['single']
0
+ Line.new(:line => "#{stripdot vars['single']};").save
0
       else
0
- $file.puts " #{stripdot vars['from']} -> #{stripdot vars['to']};"
0
+ Line.new(
0
+ :line => "#{stripdot vars['from']} -> #{stripdot vars['to']};").save
0
       end
0
     end
0
   end
0
 end
0
 
0
+class WikiMapDisplayHandler < Mongrel::HttpHandler
0
+ def process(request,response)
0
+ response.start(200) do |head, out|
0
+ head["Content-Type"] = "image/png"
0
+ vars = Mongrel::HttpRequest.query_parse(request.params['QUERY_STRING'])
0
+ File.open($dot_fn, 'w') do |f|
0
+ f.write((["digraph wiki_map {"] +
0
+ Line.find(:all).collect{|l| " #{l.line}"} + ["}"]).join("\n"))
0
+ end
0
+ `dot -Tpng #{$dot_fn} -o #{$png_fn}`
0
+ out.write File.read($png_fn)
0
+ end
0
+ end
0
+end
0
+
0
 
0
-$file.puts "digraph wiki_map {"
0
 server = Mongrel::HttpServer.new("127.0.0.1", "9999")
0
-server.register("/", HeaderHandler.new)
0
+server.register("/", WikiLoggerHandler.new)
0
+server.register("/show", WikiMapDisplayHandler.new)
0
 server.register("/favicon.ico", Mongrel::Error404Handler.new(""))
0
 server.run.join
0
 

Comments

    No one has commented yet.