media_import_through_api



In [2]:
import cPickle
import os.path

api_key = cPickle.load( file( os.path.expanduser( '~/mediacloud_api_key.pickle' ), 'r' ) )

In [3]:
import cPickle
import os.path

cPickle.dump( api_key, file( os.path.expanduser( '~/mediacloud_api_key.pickle' ), 'wb' ) )

In [4]:
import sys
#print (sys.path)
sys.path.append('../')
sys.path
import mc_database

In [1]:
import psycopg2
import psycopg2.extras

In [7]:
import mediacloud, json

In [5]:
def cast_fields_to_bool( dict_obj, fields ):
    for field in fields:
        if dict_obj[ field ] is not None:
            dict_obj[ field ] = bool( dict_obj[field])

In [6]:
def non_list_pairs( item ):
    item = { k: item[k]  for k in  item.keys() if type(item[k]) != list  }
    return item

def insert_into_table( cursor, table_name, item ):
    item = { k: item[k]  for k in  item.keys() if type(item[k]) != list  }
    columns = ', '.join(item.keys())
    
    placeholders = ', '.join([ '%('+ c + ')s'  for c in item.keys() ])
    
    query = "insert into " + table_name + " (%s) Values (%s)" %( columns, placeholders)
    #print query
    cursor.execute( query , item )

In [39]:
def update_db_sequences( conn ):
    cursor = conn.cursor(cursor_factory=psycopg2.extras.DictCursor)
    cursor.execute( "select setval(pg_get_serial_sequence('tag_sets', 'tag_sets_id'), (select max(tag_sets_id)+1 from tag_sets))" )
    
    cursor.execute( "select setval(pg_get_serial_sequence('tags', 'tags_id'), (select max(tags_id)+1 from tags))" )
    cursor.execute( "select setval(pg_get_serial_sequence('media', 'media_id'), (select max(media_id)+1 from media))" )
    cursor.execute( "select setval(pg_get_serial_sequence('media_sets', 'media_id'), (select max(media_id)+1 from media))" )
    cursor.execute( "select setval(pg_get_serial_sequence('media_sets_media_map', 'media_id'), (select max(media_id)+1 from media))" )
    cursor.execute( "select setval(pg_get_serial_sequence('media_tags_map', 'media_tags_map_id'), (select max(media_tags_map_id)+1 from media_tags_map))" )
    cursor.execute( "select setval(pg_get_serial_sequence('feeds', 'feeds_id'), (select max(feeds_id)+1 from feeds))" )
    
    cursor.execute( "select setval(pg_get_serial_sequence('feeds_tags_map', 'feeds_tags_map_id'), (select max(feeds_tags_map_id)+1 from feeds_tags_map))" )
    
    cursor.close()
    conn.commit()

In [9]:
def truncate_tables( conn ):
    cursor = conn.cursor(cursor_factory=psycopg2.extras.DictCursor)
    cursor.execute( "SELECT count(*)  > 10000 as has_many_downloads from downloads")
    rec = cursor.fetchone()
    assert ( not rec['has_many_downloads'])
    
    cursor.execute( "TRUNCATE tag_sets CASCADE " )
    cursor.execute( "TRUNCATE media CASCADE" )
    cursor.execute( "TRUNCATE feeds CASCADE" )
    conn.commit()

In [11]:
def get_tag_sets( mc ):
    all_tag_sets = []

    last_tag_sets_id = 0
    
    while True:
        tag_sets = mc.tagSetList( last_tag_sets_id=last_tag_sets_id, rows=20)
        if len(tag_sets) == 0:
            break
        
        #print tag_sets
        last_tag_sets_id = tag_sets[-1]['tag_sets_id']
        #print last_tag_sets_id
    
         
        all_tag_sets.extend(tag_sets)
        
    return all_tag_sets

In [13]:
def add_tag_sets_to_database( conn, all_tag_sets ):
    cursor = conn.cursor(cursor_factory=psycopg2.extras.DictCursor)
    for tag_set in all_tag_sets:
        cast_fields_to_bool( tag_set, [ 'show_on_media', 'show_on_stories' ] )
        insert_into_table( cursor, 'tag_sets', tag_set )
        print 'inserted ' + tag_set['name']
    conn.commit()

In [29]:
def add_media_to_database( conn, all_media ):
    
    cursor = conn.cursor(cursor_factory=psycopg2.extras.DictCursor)
    cursor.execute( "SET CONSTRAINTS media_dup_media_id_fkey DEFERRED ") 
    
    num_media_inserted = 0
    
    for medium in all_media:
        medium = non_list_pairs( medium)
        #del medium['dup_media_id']
        cast_fields_to_bool( medium, [ 'extract_author', 'annotate_with_corenlp', "full_text_rss",
                                  "foreign_rss_links",  "feeds_added", "moderated", "use_pager", "is_not_dup"])
        insert_into_table( cursor, 'media', medium )
        
        num_media_inserted += 1
        
        if num_media_inserted % 500 == 0:
            print "Inserted " + str( num_media_inserted ) + " out of " + str(len(all_media) )
            
        #print 'inserted '
        
    conn.commit()
    cursor.close()
    conn.commit()

In [17]:
def get_media( mc ):
    all_media = []

    last_media_id = 0
    
    while True:
        media = mc.mediaList( last_media_id=last_media_id, rows=1000)
        print last_media_id, len( media ), len( all_media )
    
        if len(media) == 0:
            break
            
        last_media_id = media[-1]['media_id']
        last_media_id
        
        all_media.extend(media)
        
        #if len( all_media ) > 10000:
        #    break
    
    return all_media

In [28]:
def add_feeds_from_media_to_database( conn, media ):
    cursor = conn.cursor(cursor_factory=psycopg2.extras.DictCursor)
    
    num_media_processed = 0
    
    for medium in media:
        feeds_for_media = mc.feedList( media_id=medium['media_id'], rows=1000)
        assert len( feeds_for_media ) < 1000
        
        for feed in feeds_for_media:
            insert_into_table( cursor, 'feeds', feed )
            
        num_media_processed += 1
        
        if num_media_processed % 1000 == 0:
            print "inserted feeds for " + str( num_media_processed ) + " out of " + str ( len( all_media ) )
    
    conn.commit()
    cursor.close()
    conn.commit()

In [16]:
mc = mediacloud.api.MediaCloud(api_key, all_fields=True)

In [43]:
conn = mc_database.connect_to_database()
truncate_tables( conn )
update_db_sequences(conn)
all_tag_sets = get_tag_sets( mc )

add_tag_sets_to_database( conn, all_tag_sets )
all_media = get_media( mc )
add_media_to_database( conn, all_media )
add_feeds_from_media_to_database( conn, all_media[:100])
update_db_sequences(conn)


inserted content_type
inserted usnewspapercirculation
inserted workflow
inserted collection
inserted manual_term
inserted term_study
inserted Calais (term_study)
inserted Yahoo (term_study)
inserted NYTTopics (term_study)
inserted NYTTopics
inserted tagged
inserted Calais
inserted source
inserted pklocation
inserted pkgeog-type
inserted word_cloud
inserted morning_analytics_russia_20100915_cluster
inserted morning_analytics_russia_full_20100911_cluster
inserted topic
inserted spidered
inserted sopa
inserted controversy_trayvon
inserted collection:_newyork_jessie_spidering_10242012
inserted date_guess_method
inserted controversy_prop 40
inserted controversy_prop 32
inserted controversy_prop 34
inserted controversy_prop 31
inserted controversy_prop 33
inserted controversy_prop 35
inserted controversy_prop 36
inserted controversy_prop 37
inserted controversy_prop 39
inserted controversy_prop 30 + 38
inserted controversy_sopa
inserted emm_type
inserted emm_subject
inserted emm_country
inserted emm_region
inserted emm_category
inserted emm_lang
inserted controversy_russia protests
inserted gv_country
inserted ca_ra_media_types
inserted date_invalid
inserted controversy_nsa / snowden
inserted portuguese_media_type
inserted portuguese_topic
inserted portuguese_state
inserted controversy_obama 2012-11
inserted controversy_obama-romney 2012-10
inserted controversy_tamarod
inserted partisan_coding_20140218
inserted dlarochelle@cyber.law.harvard.edu
inserted controversy_rolezinhos
inserted egypt_media_type
inserted egypt_valence
inserted controversy_tamarod - new
inserted foo
inserted hroberts@cyber.law.harvard.edu
inserted rahulb@media.mit.edu
inserted controversy_network neutrality
inserted controversy_isla vista
inserted kenya_media_source
inserted controversy_gaza 2014-07
inserted media_type
inserted controversy_Chinese Bitcoin 2
inserted controversy_isla vista - simple
inserted controversy_Chinese Bitcoin 3
inserted controversy_Chinese Bitcoin
inserted controversy_sopa 20130507
inserted controversy_hobby lobby
inserted controversy_720_media_types
inserted controversy_gaza
inserted controversy_teen pregnancy - broken
inserted controversy_teen pregnancy
inserted controversy_ebola
inserted controversy_ferguson
inserted controversy_ferguson / mike brown
inserted controversy_791_media_types
inserted controversy_gamergate
inserted controversy_tobacco
inserted controversy_abortion
inserted controversy_contraception
inserted controversy_contraception / bc
inserted controversy_sex education
inserted controversy_reproductive rights
inserted controversy_mlk
inserted controversy_ferguson / garner
inserted fake_sources
inserted controversy_mlk simple
inserted extractor_version
inserted controversy_mtv the talk
inserted controversy_ap sentences
inserted controversy_867_media_types
inserted controversy_common core
inserted controversy_egypt spider 2015-03-01 - 2015-03-03
inserted controversy_climate change
inserted controversy_egypt spider
inserted controversy_vaccines
inserted mexico_state
inserted controversy_garissa
inserted controversy_charlie hebdo
inserted controversy_walter scott
inserted scraped
inserted controversy_climate change,  Q3 2014
inserted controversy_gamergate2
inserted controversy_freddie gray
inserted controversy_nsa 2015-02-01 - 2015-04-28
0 1000 0
1253 1000 1000
2333 1000 2000
3358 1000 3000
4364 1000 4000
5378 1000 5000
6392 1000 6000
7418 1000 7000
8419 1000 8000
9419 1000 9000
10419 1000 10000
11419 1000 11000
12420 1000 12000
13422 1000 13000
14424 1000 14000
15424 1000 15000
16425 1000 16000
17425 1000 17000
18655 1000 18000
19655 1000 19000
20657 1000 20000
21658 1000 21000
22658 1000 22000
23660 1000 23000
24811 1000 24000
25811 1000 25000
26811 1000 26000
27820 1000 27000
29019 1000 28000
30019 1000 29000
31019 1000 30000
32019 1000 31000
33019 1000 32000
34019 1000 33000
35019 1000 34000
39076 1000 35000
40076 1000 36000
41076 1000 37000
42077 1000 38000
43077 1000 39000
44077 1000 40000
45077 1000 41000
46077 1000 42000
47077 1000 43000
48077 1000 44000
49077 1000 45000
50077 1000 46000
51077 1000 47000
52078 1000 48000
53103 1000 49000
54103 1000 50000
55880 1000 51000
56880 1000 52000
57880 1000 53000
58880 1000 54000
59880 1000 55000
60880 1000 56000
61880 1000 57000
62880 1000 58000
63880 1000 59000
64880 1000 60000
65880 1000 61000
67013 1000 62000
68014 1000 63000
69015 1000 64000
70015 1000 65000
71016 1000 66000
72017 1000 67000
73017 1000 68000
74017 1000 69000
75018 1000 70000
76018 1000 71000
77018 1000 72000
78018 1000 73000
79019 1000 74000
80019 1000 75000
81019 1000 76000
82020 1000 77000
83021 1000 78000
84063 1000 79000
85072 1000 80000
86072 1000 81000
87072 1000 82000
88072 1000 83000
89072 1000 84000
90072 1000 85000
91089 1000 86000
92089 1000 87000
93089 1000 88000
94089 1000 89000
95089 1000 90000
96089 1000 91000
97091 1000 92000
98091 1000 93000
99091 1000 94000
100091 1000 95000
101091 1000 96000
102268 1000 97000
103306 1000 98000
104306 1000 99000
105320 1000 100000
106328 1000 101000
107350 1000 102000
108438 1000 103000
109510 1000 104000
110510 1000 105000
111512 1000 106000
112514 1000 107000
113515 1000 108000
114515 1000 109000
115515 1000 110000
116515 1000 111000
117515 1000 112000
118516 1000 113000
119540 1000 114000
120540 1000 115000
121540 1000 116000
122540 1000 117000
123540 1000 118000
124540 1000 119000
125540 1000 120000
126540 1000 121000
127540 1000 122000
128540 1000 123000
129540 1000 124000
130540 1000 125000
131540 1000 126000
132540 1000 127000
133540 1000 128000
134540 1000 129000
135540 1000 130000
136540 1000 131000
137540 1000 132000
138540 1000 133000
139540 1000 134000
140540 1000 135000
141540 1000 136000
142540 1000 137000
143548 1000 138000
144548 1000 139000
145548 1000 140000
146550 1000 141000
147550 1000 142000
148550 1000 143000
149550 1000 144000
150551 1000 145000
151551 1000 146000
152552 1000 147000
153552 1000 148000
154552 1000 149000
155552 1000 150000
156553 1000 151000
157553 1000 152000
158553 1000 153000
159553 1000 154000
160553 1000 155000
161555 1000 156000
162556 1000 157000
163556 1000 158000
164556 1000 159000
165556 1000 160000
166556 1000 161000
167557 1000 162000
168557 1000 163000
169557 1000 164000
170558 1000 165000
171558 1000 166000
172558 1000 167000
173559 1000 168000
174559 1000 169000
175559 1000 170000
176559 1000 171000
177574 1000 172000
178592 1000 173000
179592 1000 174000
180599 1000 175000
181599 1000 176000
182599 1000 177000
183599 1000 178000
184599 1000 179000
185599 1000 180000
186599 1000 181000
187599 1000 182000
188599 1000 183000
189599 1000 184000
190600 1000 185000
191600 1000 186000
192600 1000 187000
193601 1000 188000
194604 1000 189000
195605 1000 190000
196606 1000 191000
197606 1000 192000
198606 1000 193000
199607 1000 194000
200608 1000 195000
201618 1000 196000
202625 1000 197000
203625 1000 198000
204629 1000 199000
205629 1000 200000
206630 1000 201000
207631 1000 202000
208631 1000 203000
209668 1000 204000
210668 1000 205000
211677 1000 206000
212681 1000 207000
213705 1000 208000
214705 1000 209000
215716 1000 210000
216716 1000 211000
217717 1000 212000
218717 1000 213000
219717 1000 214000
220717 1000 215000
221718 1000 216000
222719 1000 217000
223719 1000 218000
224719 1000 219000
225720 1000 220000
226720 1000 221000
227720 1000 222000
228720 1000 223000
229720 1000 224000
230721 1000 225000
231721 1000 226000
232721 1000 227000
233721 1000 228000
234721 1000 229000
235722 1000 230000
236722 1000 231000
237723 1000 232000
238723 1000 233000
239723 1000 234000
240723 1000 235000
241724 1000 236000
242724 1000 237000
243724 1000 238000
244725 1000 239000
245727 1000 240000
246728 1000 241000
247728 1000 242000
248729 1000 243000
249729 1000 244000
250729 1000 245000
251730 1000 246000
252730 1000 247000
253730 1000 248000
254731 1000 249000
255732 1000 250000
256734 1000 251000
257735 1000 252000
258738 1000 253000
259747 1000 254000
260747 1000 255000
261748 1000 256000
262751 1000 257000
263752 1000 258000
264753 669 259000
265426 0 259669
Inserted 500 out of 259669
Inserted 1000 out of 259669
Inserted 1500 out of 259669
Inserted 2000 out of 259669
Inserted 2500 out of 259669
Inserted 3000 out of 259669
Inserted 3500 out of 259669
Inserted 4000 out of 259669
Inserted 4500 out of 259669
Inserted 5000 out of 259669
Inserted 5500 out of 259669
Inserted 6000 out of 259669
Inserted 6500 out of 259669
Inserted 7000 out of 259669
Inserted 7500 out of 259669
Inserted 8000 out of 259669
Inserted 8500 out of 259669
Inserted 9000 out of 259669
Inserted 9500 out of 259669
Inserted 10000 out of 259669
Inserted 10500 out of 259669
Inserted 11000 out of 259669
Inserted 11500 out of 259669
Inserted 12000 out of 259669
Inserted 12500 out of 259669
Inserted 13000 out of 259669
Inserted 13500 out of 259669
Inserted 14000 out of 259669
Inserted 14500 out of 259669
Inserted 15000 out of 259669
Inserted 15500 out of 259669
Inserted 16000 out of 259669
Inserted 16500 out of 259669
Inserted 17000 out of 259669
Inserted 17500 out of 259669
Inserted 18000 out of 259669
Inserted 18500 out of 259669
Inserted 19000 out of 259669
Inserted 19500 out of 259669
Inserted 20000 out of 259669
Inserted 20500 out of 259669
Inserted 21000 out of 259669
Inserted 21500 out of 259669
Inserted 22000 out of 259669
Inserted 22500 out of 259669
Inserted 23000 out of 259669
Inserted 23500 out of 259669
Inserted 24000 out of 259669
Inserted 24500 out of 259669
Inserted 25000 out of 259669
Inserted 25500 out of 259669
Inserted 26000 out of 259669
Inserted 26500 out of 259669
Inserted 27000 out of 259669
Inserted 27500 out of 259669
Inserted 28000 out of 259669
Inserted 28500 out of 259669
Inserted 29000 out of 259669
Inserted 29500 out of 259669
Inserted 30000 out of 259669
Inserted 30500 out of 259669
Inserted 31000 out of 259669
Inserted 31500 out of 259669
Inserted 32000 out of 259669
Inserted 32500 out of 259669
Inserted 33000 out of 259669
Inserted 33500 out of 259669
Inserted 34000 out of 259669
Inserted 34500 out of 259669
Inserted 35000 out of 259669
Inserted 35500 out of 259669
Inserted 36000 out of 259669
Inserted 36500 out of 259669
Inserted 37000 out of 259669
Inserted 37500 out of 259669
Inserted 38000 out of 259669
Inserted 38500 out of 259669
Inserted 39000 out of 259669
Inserted 39500 out of 259669
Inserted 40000 out of 259669
Inserted 40500 out of 259669
Inserted 41000 out of 259669
Inserted 41500 out of 259669
Inserted 42000 out of 259669
Inserted 42500 out of 259669
Inserted 43000 out of 259669
Inserted 43500 out of 259669
Inserted 44000 out of 259669
Inserted 44500 out of 259669
Inserted 45000 out of 259669
Inserted 45500 out of 259669
Inserted 46000 out of 259669
Inserted 46500 out of 259669
Inserted 47000 out of 259669
Inserted 47500 out of 259669
Inserted 48000 out of 259669
Inserted 48500 out of 259669
Inserted 49000 out of 259669
Inserted 49500 out of 259669
Inserted 50000 out of 259669
Inserted 50500 out of 259669
Inserted 51000 out of 259669
Inserted 51500 out of 259669
Inserted 52000 out of 259669
Inserted 52500 out of 259669
Inserted 53000 out of 259669
Inserted 53500 out of 259669
Inserted 54000 out of 259669
Inserted 54500 out of 259669
Inserted 55000 out of 259669
Inserted 55500 out of 259669
Inserted 56000 out of 259669
Inserted 56500 out of 259669
Inserted 57000 out of 259669
Inserted 57500 out of 259669
Inserted 58000 out of 259669
Inserted 58500 out of 259669
Inserted 59000 out of 259669
Inserted 59500 out of 259669
Inserted 60000 out of 259669
Inserted 60500 out of 259669
Inserted 61000 out of 259669
Inserted 61500 out of 259669
Inserted 62000 out of 259669
Inserted 62500 out of 259669
Inserted 63000 out of 259669
Inserted 63500 out of 259669
Inserted 64000 out of 259669
Inserted 64500 out of 259669
Inserted 65000 out of 259669
Inserted 65500 out of 259669
Inserted 66000 out of 259669
Inserted 66500 out of 259669
Inserted 67000 out of 259669
Inserted 67500 out of 259669
Inserted 68000 out of 259669
Inserted 68500 out of 259669
Inserted 69000 out of 259669
Inserted 69500 out of 259669
Inserted 70000 out of 259669
Inserted 70500 out of 259669
Inserted 71000 out of 259669
Inserted 71500 out of 259669
Inserted 72000 out of 259669
Inserted 72500 out of 259669
Inserted 73000 out of 259669
Inserted 73500 out of 259669
Inserted 74000 out of 259669
Inserted 74500 out of 259669
Inserted 75000 out of 259669
Inserted 75500 out of 259669
Inserted 76000 out of 259669
Inserted 76500 out of 259669
Inserted 77000 out of 259669
Inserted 77500 out of 259669
Inserted 78000 out of 259669
Inserted 78500 out of 259669
Inserted 79000 out of 259669
Inserted 79500 out of 259669
Inserted 80000 out of 259669
Inserted 80500 out of 259669
Inserted 81000 out of 259669
Inserted 81500 out of 259669
Inserted 82000 out of 259669
Inserted 82500 out of 259669
Inserted 83000 out of 259669
Inserted 83500 out of 259669
Inserted 84000 out of 259669
Inserted 84500 out of 259669
Inserted 85000 out of 259669
Inserted 85500 out of 259669
Inserted 86000 out of 259669
Inserted 86500 out of 259669
Inserted 87000 out of 259669
Inserted 87500 out of 259669
Inserted 88000 out of 259669
Inserted 88500 out of 259669
Inserted 89000 out of 259669
Inserted 89500 out of 259669
Inserted 90000 out of 259669
Inserted 90500 out of 259669
Inserted 91000 out of 259669
Inserted 91500 out of 259669
Inserted 92000 out of 259669
Inserted 92500 out of 259669
Inserted 93000 out of 259669
Inserted 93500 out of 259669
Inserted 94000 out of 259669
Inserted 94500 out of 259669
Inserted 95000 out of 259669
Inserted 95500 out of 259669
Inserted 96000 out of 259669
Inserted 96500 out of 259669
Inserted 97000 out of 259669
Inserted 97500 out of 259669
Inserted 98000 out of 259669
Inserted 98500 out of 259669
Inserted 99000 out of 259669
Inserted 99500 out of 259669
Inserted 100000 out of 259669
Inserted 100500 out of 259669
Inserted 101000 out of 259669
Inserted 101500 out of 259669
Inserted 102000 out of 259669
Inserted 102500 out of 259669
Inserted 103000 out of 259669
Inserted 103500 out of 259669
Inserted 104000 out of 259669
Inserted 104500 out of 259669
Inserted 105000 out of 259669
Inserted 105500 out of 259669
Inserted 106000 out of 259669
Inserted 106500 out of 259669
Inserted 107000 out of 259669
Inserted 107500 out of 259669
Inserted 108000 out of 259669
Inserted 108500 out of 259669
Inserted 109000 out of 259669
Inserted 109500 out of 259669
Inserted 110000 out of 259669
Inserted 110500 out of 259669
Inserted 111000 out of 259669
Inserted 111500 out of 259669
Inserted 112000 out of 259669
Inserted 112500 out of 259669
Inserted 113000 out of 259669
Inserted 113500 out of 259669
Inserted 114000 out of 259669
Inserted 114500 out of 259669
Inserted 115000 out of 259669
Inserted 115500 out of 259669
Inserted 116000 out of 259669
Inserted 116500 out of 259669
Inserted 117000 out of 259669
Inserted 117500 out of 259669
Inserted 118000 out of 259669
Inserted 118500 out of 259669
Inserted 119000 out of 259669
Inserted 119500 out of 259669
Inserted 120000 out of 259669
Inserted 120500 out of 259669
Inserted 121000 out of 259669
Inserted 121500 out of 259669
Inserted 122000 out of 259669
Inserted 122500 out of 259669
Inserted 123000 out of 259669
Inserted 123500 out of 259669
Inserted 124000 out of 259669
Inserted 124500 out of 259669
Inserted 125000 out of 259669
Inserted 125500 out of 259669
Inserted 126000 out of 259669
Inserted 126500 out of 259669
Inserted 127000 out of 259669
Inserted 127500 out of 259669
Inserted 128000 out of 259669
Inserted 128500 out of 259669
Inserted 129000 out of 259669
Inserted 129500 out of 259669
Inserted 130000 out of 259669
Inserted 130500 out of 259669
Inserted 131000 out of 259669
Inserted 131500 out of 259669
Inserted 132000 out of 259669
Inserted 132500 out of 259669
Inserted 133000 out of 259669
Inserted 133500 out of 259669
Inserted 134000 out of 259669
Inserted 134500 out of 259669
Inserted 135000 out of 259669
Inserted 135500 out of 259669
Inserted 136000 out of 259669
Inserted 136500 out of 259669
Inserted 137000 out of 259669
Inserted 137500 out of 259669
Inserted 138000 out of 259669
Inserted 138500 out of 259669
Inserted 139000 out of 259669
Inserted 139500 out of 259669
Inserted 140000 out of 259669
Inserted 140500 out of 259669
Inserted 141000 out of 259669
Inserted 141500 out of 259669
Inserted 142000 out of 259669
Inserted 142500 out of 259669
Inserted 143000 out of 259669
Inserted 143500 out of 259669
Inserted 144000 out of 259669
Inserted 144500 out of 259669
Inserted 145000 out of 259669
Inserted 145500 out of 259669
Inserted 146000 out of 259669
Inserted 146500 out of 259669
Inserted 147000 out of 259669
Inserted 147500 out of 259669
Inserted 148000 out of 259669
Inserted 148500 out of 259669
Inserted 149000 out of 259669
Inserted 149500 out of 259669
Inserted 150000 out of 259669
Inserted 150500 out of 259669
Inserted 151000 out of 259669
Inserted 151500 out of 259669
Inserted 152000 out of 259669
Inserted 152500 out of 259669
Inserted 153000 out of 259669
Inserted 153500 out of 259669
Inserted 154000 out of 259669
Inserted 154500 out of 259669
Inserted 155000 out of 259669
Inserted 155500 out of 259669
Inserted 156000 out of 259669
Inserted 156500 out of 259669
Inserted 157000 out of 259669
Inserted 157500 out of 259669
Inserted 158000 out of 259669
Inserted 158500 out of 259669
Inserted 159000 out of 259669
Inserted 159500 out of 259669
Inserted 160000 out of 259669
Inserted 160500 out of 259669
Inserted 161000 out of 259669
Inserted 161500 out of 259669
Inserted 162000 out of 259669
Inserted 162500 out of 259669
Inserted 163000 out of 259669
Inserted 163500 out of 259669
Inserted 164000 out of 259669
Inserted 164500 out of 259669
Inserted 165000 out of 259669
Inserted 165500 out of 259669
Inserted 166000 out of 259669
Inserted 166500 out of 259669
Inserted 167000 out of 259669
Inserted 167500 out of 259669
Inserted 168000 out of 259669
Inserted 168500 out of 259669
Inserted 169000 out of 259669
Inserted 169500 out of 259669
Inserted 170000 out of 259669
Inserted 170500 out of 259669
Inserted 171000 out of 259669
Inserted 171500 out of 259669
Inserted 172000 out of 259669
Inserted 172500 out of 259669
Inserted 173000 out of 259669
Inserted 173500 out of 259669
Inserted 174000 out of 259669
Inserted 174500 out of 259669
Inserted 175000 out of 259669
Inserted 175500 out of 259669
Inserted 176000 out of 259669
Inserted 176500 out of 259669
Inserted 177000 out of 259669
Inserted 177500 out of 259669
Inserted 178000 out of 259669
Inserted 178500 out of 259669
Inserted 179000 out of 259669
Inserted 179500 out of 259669
Inserted 180000 out of 259669
Inserted 180500 out of 259669
Inserted 181000 out of 259669
Inserted 181500 out of 259669
Inserted 182000 out of 259669
Inserted 182500 out of 259669
Inserted 183000 out of 259669
Inserted 183500 out of 259669
Inserted 184000 out of 259669
Inserted 184500 out of 259669
Inserted 185000 out of 259669
Inserted 185500 out of 259669
Inserted 186000 out of 259669
Inserted 186500 out of 259669
Inserted 187000 out of 259669
Inserted 187500 out of 259669
Inserted 188000 out of 259669
Inserted 188500 out of 259669
Inserted 189000 out of 259669
Inserted 189500 out of 259669
Inserted 190000 out of 259669
Inserted 190500 out of 259669
Inserted 191000 out of 259669
Inserted 191500 out of 259669
Inserted 192000 out of 259669
Inserted 192500 out of 259669
Inserted 193000 out of 259669
Inserted 193500 out of 259669
Inserted 194000 out of 259669
Inserted 194500 out of 259669
Inserted 195000 out of 259669
Inserted 195500 out of 259669
Inserted 196000 out of 259669
Inserted 196500 out of 259669
Inserted 197000 out of 259669
Inserted 197500 out of 259669
Inserted 198000 out of 259669
Inserted 198500 out of 259669
Inserted 199000 out of 259669
Inserted 199500 out of 259669
Inserted 200000 out of 259669
Inserted 200500 out of 259669
Inserted 201000 out of 259669
Inserted 201500 out of 259669
Inserted 202000 out of 259669
Inserted 202500 out of 259669
Inserted 203000 out of 259669
Inserted 203500 out of 259669
Inserted 204000 out of 259669
Inserted 204500 out of 259669
Inserted 205000 out of 259669
Inserted 205500 out of 259669
Inserted 206000 out of 259669
Inserted 206500 out of 259669
Inserted 207000 out of 259669
Inserted 207500 out of 259669
Inserted 208000 out of 259669
Inserted 208500 out of 259669
Inserted 209000 out of 259669
Inserted 209500 out of 259669
Inserted 210000 out of 259669
Inserted 210500 out of 259669
Inserted 211000 out of 259669
Inserted 211500 out of 259669
Inserted 212000 out of 259669
Inserted 212500 out of 259669
Inserted 213000 out of 259669
Inserted 213500 out of 259669
Inserted 214000 out of 259669
Inserted 214500 out of 259669
Inserted 215000 out of 259669
Inserted 215500 out of 259669
Inserted 216000 out of 259669
Inserted 216500 out of 259669
Inserted 217000 out of 259669
Inserted 217500 out of 259669
Inserted 218000 out of 259669
Inserted 218500 out of 259669
Inserted 219000 out of 259669
Inserted 219500 out of 259669
Inserted 220000 out of 259669
Inserted 220500 out of 259669
Inserted 221000 out of 259669
Inserted 221500 out of 259669
Inserted 222000 out of 259669
Inserted 222500 out of 259669
Inserted 223000 out of 259669
Inserted 223500 out of 259669
Inserted 224000 out of 259669
Inserted 224500 out of 259669
Inserted 225000 out of 259669
Inserted 225500 out of 259669
Inserted 226000 out of 259669
Inserted 226500 out of 259669
Inserted 227000 out of 259669
Inserted 227500 out of 259669
Inserted 228000 out of 259669
Inserted 228500 out of 259669
Inserted 229000 out of 259669
Inserted 229500 out of 259669
Inserted 230000 out of 259669
Inserted 230500 out of 259669
Inserted 231000 out of 259669
Inserted 231500 out of 259669
Inserted 232000 out of 259669
Inserted 232500 out of 259669
Inserted 233000 out of 259669
Inserted 233500 out of 259669
Inserted 234000 out of 259669
Inserted 234500 out of 259669
Inserted 235000 out of 259669
Inserted 235500 out of 259669
Inserted 236000 out of 259669
Inserted 236500 out of 259669
Inserted 237000 out of 259669
Inserted 237500 out of 259669
Inserted 238000 out of 259669
Inserted 238500 out of 259669
Inserted 239000 out of 259669
Inserted 239500 out of 259669
Inserted 240000 out of 259669
Inserted 240500 out of 259669
Inserted 241000 out of 259669
Inserted 241500 out of 259669
Inserted 242000 out of 259669
Inserted 242500 out of 259669
Inserted 243000 out of 259669
Inserted 243500 out of 259669
Inserted 244000 out of 259669
Inserted 244500 out of 259669
Inserted 245000 out of 259669
Inserted 245500 out of 259669
Inserted 246000 out of 259669
Inserted 246500 out of 259669
Inserted 247000 out of 259669
Inserted 247500 out of 259669
Inserted 248000 out of 259669
Inserted 248500 out of 259669
Inserted 249000 out of 259669
Inserted 249500 out of 259669
Inserted 250000 out of 259669
Inserted 250500 out of 259669
Inserted 251000 out of 259669
Inserted 251500 out of 259669
Inserted 252000 out of 259669
Inserted 252500 out of 259669
Inserted 253000 out of 259669
Inserted 253500 out of 259669
Inserted 254000 out of 259669
Inserted 254500 out of 259669
Inserted 255000 out of 259669
Inserted 255500 out of 259669
Inserted 256000 out of 259669
Inserted 256500 out of 259669
Inserted 257000 out of 259669
Inserted 257500 out of 259669
Inserted 258000 out of 259669
Inserted 258500 out of 259669
Inserted 259000 out of 259669
Inserted 259500 out of 259669