Index: apachesolr_search.csv.inc
===================================================================
RCS file: apachesolr_search.csv.inc
diff -N apachesolr_search.csv.inc
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ apachesolr_search.csv.inc	7 Jul 2009 00:00:44 -0000
@@ -0,0 +1,57 @@
+<?php
+// $Id$
+
+/**
+ * @file
+ *   Export search content to CSV
+ */
+
+function apachesolr_search_exportcsv() {
+  $filters = isset($_GET['filters']) ? $_GET['filters'] : '';
+  $solrsort = isset($_GET['solrsort']) ? $_GET['solrsort'] : '';
+  $page = isset($_GET['page']) ? $_GET['page'] : 0;
+  $keys = search_get_keys();
+
+  if (trim($keys)) {
+    watchdog('apachesolr_csv', 'Apachesolr Export CSV: %keys.', array('%keys' => $keys), WATCHDOG_NOTICE);
+    try {
+      $results = apachesolr_search_execute($keys, $filters, $solrsort, 'search/' . arg(1), $page);
+      return apachesolr_search_csv_feed($results);
+    }
+    catch (Exception $e) {
+      watchdog('My custom Solr Search', $e->getMessage(), NULL, WATCHDOG_ERROR);
+      apachesolr_failure(t('Solr search'), is_null($query) ? $keys : $query->get_query_basic());
+    }
+  }
+}
+
+function apachesolr_search_csv_feed($results) {
+  $output = '"Title","Snippet","Link","Type","Author","Date","Comments","Attachments","Score"'."\n";
+
+  foreach ($results as $result){
+    $items = array(
+      $result['title'],
+      trim($result['snippet']),
+      $result['link'],
+      $result['type'],
+      $result['node']->name,
+      format_date($result['date']),
+      substr($result['extra'][0], 0, strlen($result['extra'][0]) - 9),
+      substr($result['extra'][1], 0, strlen($result['extra'][1]) - 12),
+      $result['score'],
+    );
+    $items = array_map('_apachesolr_search_csv_escape', $items);
+    $output .= implode($items, ",");
+    $output .= "\n";
+  }
+
+  drupal_set_header('Content-type: text/csv; charset=utf-8');
+  drupal_set_header('Content-Disposition: attachment; filename="searchresults.csv"');
+  print $output;
+}
+
+function _apachesolr_search_csv_escape($input) {
+  if (!is_numeric($input)) $input = '"'.str_replace('"','""',$input).'"';
+  return $input;
+}
+
Index: apachesolr_search.module
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/apachesolr/apachesolr_search.module,v
retrieving revision 1.1.2.6.2.110
diff -u -p -r1.1.2.6.2.110 apachesolr_search.module
--- apachesolr_search.module	2 Jul 2009 08:50:46 -0000	1.1.2.6.2.110
+++ apachesolr_search.module	7 Jul 2009 00:00:45 -0000
@@ -51,6 +51,13 @@ function apachesolr_search_menu() {
     'type'             => MENU_LOCAL_TASK,
     'file'             => 'apachesolr_search.admin.inc',
   );
+  $items['search/apachesolr_search_csv'] = array(
+    'title'            => 'Export apachesolr csv',
+    'page callback'    => 'apachesolr_search_exportcsv',
+    'access arguments' => array('search content'),
+    'type'             => MENU_LOCAL_TASK,
+    'file'             => 'apachesolr_search.csv.inc',
+  );
 
   return $items;
 }
