[NUUG fiksgatami] [patch] Load contact list from semicolon separated file
Petter Reinholdtsen
pere at hungry.com
Fri Feb 18 10:30:50 CET 2011
Here is a patch for a small script to load the initial contact list
from a semicolon-separated file. I used it to load the entries on
fiksgatami.no, and will do so again when we go live.
Happy hacking,
--
Petter Reinholdtsen
-------------- next part --------------
--- /dev/null 2011-01-22 12:19:10.520167884 +0100
+++ bin/load-norwegian-contacts 2011-02-18 10:25:25.000000000 +0100
@@ -0,0 +1,63 @@
+#!/usr/bin/perl -w
+
+# load-norwegian-contacts:
+# Load initial contact list into fiksgatami.
+# The format is
+# Name;ID;email-address;Category1,Category2,...
+#
+# Based on script load-contacts copyright (c) 2006 UK Citizens Online Democracy.
+# Copyright 2011 Petter Reinholdtsen <pere at hungry.com>
+#
+# $Id: load-norwegian-contacts,v 1.0 2007-08-02 11:44:59 matthew Exp $
+
+use strict;
+require 5.8.0;
+
+# Horrible boilerplate to set up appropriate library paths.
+use FindBin;
+use lib "$FindBin::Bin/../perllib";
+use lib "$FindBin::Bin/../commonlib/perllib";
+
+use mySociety::Config;
+use mySociety::DBHandle qw(dbh select_all);
+use mySociety::Random;
+
+BEGIN {
+ mySociety::Config::set_file("$FindBin::Bin/../conf/general");
+ mySociety::DBHandle::configure(
+ Name => mySociety::Config::get('BCI_DB_NAME'),
+ User => mySociety::Config::get('BCI_DB_USER'),
+ Password => mySociety::Config::get('BCI_DB_PASS'),
+ Host => mySociety::Config::get('BCI_DB_HOST', undef),
+ Port => mySociety::Config::get('BCI_DB_PORT', undef)
+ );
+
+ if (!dbh()->selectrow_array('select secret from secret for update of secret')) {
+ local dbh()->{HandleError};
+ dbh()->do('insert into secret (secret) values (?)', {}, unpack('h*', mySociety::Random::random_bytes(32)));
+ }
+ dbh()->commit();
+}
+
+my $datafile = shift;
+
+open(FP, "<", $datafile) or die "Unable to read from $datafile";
+while (<FP>) {
+ s/\r?\n//g;
+ print "Loading $_\n";
+ my ($name, $id, $email, $categories) = split /;/;
+ unless ($categories) {
+ dbh()->do("INSERT INTO contacts (area_id, email, editor, whenedited, note, confirmed, deleted)
+ VALUES (?, ?, 'import', ms_current_timestamp(), 'Initial import', 'false', 'false')",
+ {}, $id, $email);
+ } else {
+ for my $category (split(/,\s*/, $categories)) {
+ print " Category '$category'\n";
+ dbh()->do("INSERT INTO contacts (area_id, email, category, editor, whenedited, note, confirmed, deleted)
+ VALUES (?, ?, ?, 'import', ms_current_timestamp(), 'Initial import', 'false', 'false')",
+ {}, $id, $email, $category);
+ }
+ }
+}
+dbh()->commit();
+close(FP);
More information about the fiksgatami
mailing list