diff --git a/scripts/weekly_report.php b/scripts/weekly_report.php
index 1ef574d..4b17ca9 100644
--- a/scripts/weekly_report.php
+++ b/scripts/weekly_report.php
@@ -22,36 +22,57 @@ function safe_percentage($count, $prior_count) {
return $percentagediff;
}
+$db = new SQLite3('./scripts/birds.db', SQLITE3_OPEN_READONLY);
+$db->busyTimeout(1000);
+
+$statement1 = $db->prepare('SELECT Sci_Name, Com_Name, COUNT(*) FROM detections WHERE Date BETWEEN "' . date("Y-m-d", $startdate) . '" AND "' . date("Y-m-d", $enddate) . '" GROUP By Sci_Name ORDER BY COUNT(*) DESC');
+ensure_db_ok($statement1);
+$result1 = $statement1->execute();
+while ($detection = $result1->fetchArray(SQLITE3_ASSOC)) {
+ $com_name = $detection["Com_Name"];
+ $sci_name = $detection["Sci_Name"];
+ $scount = $detection["COUNT(*)"];
+
+ # previous week
+ $statement2 = $db->prepare('SELECT COUNT(*) FROM detections WHERE Sci_Name == "' . $detection["Sci_Name"] . '" AND Date BETWEEN "' . date("Y-m-d", $startdate - (7 * 86400)) . '" AND "' . date("Y-m-d", $enddate - (7 * 86400)) . '"');
+ ensure_db_ok($statement2);
+ $result2 = $statement2->execute();
+ $priorweekcount = $result2->fetchArray(SQLITE3_ASSOC)['COUNT(*)'];
+ $percentagediff = safe_percentage($scount, $priorweekcount);
+
+ # is_first_seen?
+ $statement3 = $db->prepare('SELECT COUNT(*) FROM detections WHERE Sci_Name == "'.$sci_name.'" AND Date NOT BETWEEN "'.date("Y-m-d",$startdate).'" AND "'.date("Y-m-d",$enddate).'"');
+ ensure_db_ok($statement3);
+ $result3 = $statement3->execute();
+ $totalcount = $result3->fetchArray(SQLITE3_ASSOC)['COUNT(*)'];
+ $is_first_seen = $totalcount === 0;
+
+ $detections[$com_name] = ["count" => $scount, "percentagediff" => $percentagediff, "is_first_seen" => $is_first_seen];
+}
+
+$statement4 = $db->prepare('SELECT COUNT(*) FROM detections WHERE Date BETWEEN "'.date("Y-m-d",$startdate).'" AND "'.date("Y-m-d",$enddate).'"');
+ensure_db_ok($statement4);
+$result4 = $statement4->execute();
+$totalcount = $result4->fetchArray(SQLITE3_ASSOC)['COUNT(*)'];
+
+$statement5 = $db->prepare('SELECT COUNT(*) FROM detections WHERE Date BETWEEN "'.date("Y-m-d",$startdate- (7*86400)).'" AND "'.date("Y-m-d",$enddate- (7*86400)).'"');
+ensure_db_ok($statement5);
+$result5 = $statement5->execute();
+$priortotalcount = $result5->fetchArray(SQLITE3_ASSOC)['COUNT(*)'];
+
+$statement6 = $db->prepare('SELECT COUNT(DISTINCT(Sci_Name)) FROM detections WHERE Date BETWEEN "'.date("Y-m-d",$startdate).'" AND "'.date("Y-m-d",$enddate).'"');
+ensure_db_ok($statement6);
+$result6 = $statement6->execute();
+$totalspeciestally = $result6->fetchArray(SQLITE3_ASSOC)['COUNT(DISTINCT(Sci_Name))'];
+
+$statement7 = $db->prepare('SELECT COUNT(DISTINCT(Sci_Name)) FROM detections WHERE Date BETWEEN "'.date("Y-m-d",$startdate- (7*86400)).'" AND "'.date("Y-m-d",$enddate- (7*86400)).'"');
+ensure_db_ok($statement7);
+$result7= $statement7->execute();
+$priortotalspeciestally = $result7->fetchArray(SQLITE3_ASSOC)['COUNT(DISTINCT(Sci_Name))'];
+
+$percentagedifftotal = safe_percentage($totalcount, $priortotalcount);
+
if(isset($_GET['ascii'])) {
-
- $db = new SQLite3('./scripts/birds.db', SQLITE3_OPEN_READONLY);
- $db->busyTimeout(1000);
-
- $statement1 = $db->prepare('SELECT DISTINCT(Com_Name), COUNT(*) FROM detections WHERE Date BETWEEN "'.date("Y-m-d",$startdate).'" AND "'.date("Y-m-d",$enddate).'" GROUP By Com_Name ORDER BY COUNT(*) DESC');
- ensure_db_ok($statement1);
- $result1 = $statement1->execute();
-
- $statement4 = $db->prepare('SELECT DISTINCT(Com_Name), COUNT(*) FROM detections WHERE Date BETWEEN "'.date("Y-m-d",$startdate).'" AND "'.date("Y-m-d",$enddate).'"');
- ensure_db_ok($statement4);
- $result4 = $statement4->execute();
- $totalcount = $result4->fetchArray(SQLITE3_ASSOC)['COUNT(*)'];
-
- $statement5 = $db->prepare('SELECT DISTINCT(Com_Name), COUNT(*) FROM detections WHERE Date BETWEEN "'.date("Y-m-d",$startdate- (7*86400)).'" AND "'.date("Y-m-d",$enddate- (7*86400)).'"');
- ensure_db_ok($statement5);
- $result5 = $statement5->execute();
- $priortotalcount = $result5->fetchArray(SQLITE3_ASSOC)['COUNT(*)'];
-
- $statement6 = $db->prepare('SELECT COUNT(DISTINCT(Com_Name)) FROM detections WHERE Date BETWEEN "'.date("Y-m-d",$startdate).'" AND "'.date("Y-m-d",$enddate).'"');
- ensure_db_ok($statement6);
- $result6 = $statement6->execute();
- $totalspeciestally = $result6->fetchArray(SQLITE3_ASSOC)['COUNT(DISTINCT(Com_Name))'];
-
- $statement7 = $db->prepare('SELECT COUNT(DISTINCT(Com_Name)) FROM detections WHERE Date BETWEEN "'.date("Y-m-d",$startdate- (7*86400)).'" AND "'.date("Y-m-d",$enddate- (7*86400)).'"');
- ensure_db_ok($statement7);
- $result7= $statement7->execute();
- $priortotalspeciestally = $result7->fetchArray(SQLITE3_ASSOC)['COUNT(DISTINCT(Com_Name))'];
-
- $percentagedifftotal = safe_percentage($totalcount, $priortotalcount);
if($percentagedifftotal > 0) {
$percentagedifftotal = "+".$percentagedifftotal."%";
} else {
@@ -65,13 +86,6 @@ if(isset($_GET['ascii'])) {
$percentagedifftotaldistinctspecies = "-".abs($percentagedifftotaldistinctspecies)."%";
}
- $detections = [];
- $i = 0;
- while($detection=$result1->fetchArray(SQLITE3_ASSOC))
- {
- $detections[$detection["Com_Name"]] = $detection["COUNT(*)"];
- }
-
echo "# BirdNET-Pi: Week ".date('W', $enddate)." Report\n";
echo "Total Detections: ".$totalcount." (".$percentagedifftotal.")
";
@@ -80,41 +94,28 @@ if(isset($_GET['ascii'])) {
echo "= Top 10 Species =
";
$i = 0;
- foreach($detections as $com_name=>$scount)
+ foreach($detections as $com_name=>$stats)
{
+ $count = $stats["count"];
+ $percentagediff = $stats["percentagediff"];
$i++;
-
if($i <= 10) {
- $statement2 = $db->prepare('SELECT COUNT(*) FROM detections WHERE Com_Name == "'.$com_name.'" AND Date BETWEEN "'.date("Y-m-d",$startdate - (7*86400)).'" AND "'.date("Y-m-d",$enddate - (7*86400)).'"');
- ensure_db_ok($statement2);
- $result2 = $statement2->execute();
- $totalcount = $result2->fetchArray(SQLITE3_ASSOC);
- $priorweekcount = $totalcount['COUNT(*)'];
+ if($percentagediff > 0) {
+ $percentagediff = "+".$percentagediff."%";
+ } else {
+ $percentagediff = "-".abs($percentagediff)."%";
+ }
- // really percent changed
- $percentagediff = safe_percentage($scount, $priorweekcount);
- if($percentagediff > 0) {
- $percentagediff = "+".$percentagediff."%";
- } else {
- $percentagediff = "-".abs($percentagediff)."%";
- }
-
- echo $com_name." - ".$scount." (".$percentagediff.")
";
+ echo $com_name." - ".$scount." (".$percentagediff.")
";
}
}
echo "
= Species Detected for the First Time =
";
- $newspeciescount=0;
- foreach($detections as $com_name=>$scount)
+ $newspeciescount=0;
+ foreach($detections as $com_name=>$stats)
{
- $statement3 = $db->prepare('SELECT COUNT(*) FROM detections WHERE Com_Name == "'.$com_name.'" AND Date NOT BETWEEN "'.date("Y-m-d",$startdate).'" AND "'.date("Y-m-d",$enddate).'"');
- ensure_db_ok($statement3);
- $result3 = $statement3->execute();
- $totalcount = $result3->fetchArray(SQLITE3_ASSOC);
- $nonthisweekcount = $totalcount['COUNT(*)'];
-
- if($nonthisweekcount == 0) {
+ if($stats["is_first_seen"]) {
$newspeciescount++;
echo $com_name." - ".$scount."
";
}
@@ -123,8 +124,8 @@ if(isset($_GET['ascii'])) {
echo "No new species were seen this week.";
}
- $prevweek = date('W', $enddate) - 1;
- if($prevweek < 1) { $prevweek = 52; }
+ $prevweek = date('W', $enddate) - 1;
+ if($prevweek < 1) { $prevweek = 52; }
echo "
| @@ -174,24 +151,19 @@ while($detection=$result1->fetchArray(SQLITE3_ASSOC)) $scount) + foreach($detections as $com_name=>$stats) { $i++; if($i <= 10) { - $statement2 = $db->prepare('SELECT COUNT(*) FROM detections WHERE Com_Name == "'.$com_name.'" AND Date BETWEEN "'.date("Y-m-d",$startdate - (7*86400)).'" AND "'.date("Y-m-d",$enddate - (7*86400)).'"'); - ensure_db_ok($statement2); - $result2 = $statement2->execute(); - $totalcount = $result2->fetchArray(SQLITE3_ASSOC); - $priorweekcount = $totalcount['COUNT(*)']; - - $percentagediff = safe_percentage($scount, $priorweekcount); + $count = $stats["count"]; + $percentagediff = $stats["percentagediff"]; if($percentagediff > 0) { $percentagediff = "+".$percentagediff."%"; } else { $percentagediff = "-".abs($percentagediff)."%"; } - echo " |
| ".$com_name." ".$scount." (".$percentagediff.") |
| ".$com_name." ".$count." (".$percentagediff.") |
| ".$com_name." ".$scount." |