diff --git a/pom.xml b/pom.xml
index edbf89e..a2107ad 100644
--- a/pom.xml
+++ b/pom.xml
@@ -23,6 +23,11 @@
junit-jupiter
5.9.1
+
+ com.opencsv
+ opencsv
+ 5.4
+
diff --git a/src/main/java/fr/u_paris/gla/project/idfm/IDFMNetworkExtractor.java b/src/main/java/fr/u_paris/gla/project/idfm/IDFMNetworkExtractor.java
new file mode 100644
index 0000000..7ff601e
--- /dev/null
+++ b/src/main/java/fr/u_paris/gla/project/idfm/IDFMNetworkExtractor.java
@@ -0,0 +1,79 @@
+/**
+ *
+ */
+package fr.u_paris.gla.project.idfm;
+
+import java.io.BufferedReader;
+import java.io.FileWriter;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.InputStreamReader;
+import java.io.Reader;
+import java.net.URL;
+import java.nio.charset.StandardCharsets;
+import java.util.function.Consumer;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+
+import com.opencsv.CSVParserBuilder;
+import com.opencsv.CSVReader;
+import com.opencsv.CSVReaderBuilder;
+import com.opencsv.CSVWriterBuilder;
+import com.opencsv.ICSVParser;
+import com.opencsv.ICSVWriter;
+import com.opencsv.exceptions.CsvValidationException;
+
+/** Code of an extractor for the data from IDF mobilite.
+ *
+ * @author Emmanuel Bigeon */
+public class IDFMNetworkExtractor {
+ /** The logger for information on the process */
+ private static final Logger LOGGER = Logger
+ .getLogger(IDFMNetworkExtractor.class.getName());
+
+ // IDF mobilite API URLs
+ private static final String TRACE_FILE_URL = "https://data.iledefrance-mobilites.fr/api/explore/v2.1/catalog/datasets/traces-des-lignes-de-transport-en-commun-idfm/exports/csv?lang=fr&timezone=Europe%2FBerlin&use_labels=true&delimiter=%3B";
+ private static final String STOPS_FILE_URL = "https://data.iledefrance-mobilites.fr/api/explore/v2.1/catalog/datasets/arrets-lignes/exports/csv?lang=fr&timezone=Europe%2FBerlin&use_labels=true&delimiter=%3B";
+
+ public static void readCSVFromURL(String url, Consumer contentLineConsumer)
+ throws IOException {
+ ICSVParser parser = new CSVParserBuilder().withSeparator(';').build();
+ try (InputStream is = new URL(url).openStream();
+ Reader reader = new BufferedReader(
+ new InputStreamReader(is, StandardCharsets.UTF_8))) {
+ CSVReaderBuilder csvBuilder = new CSVReaderBuilder(reader)
+ .withCSVParser(parser);
+ try (CSVReader csv = csvBuilder.build()) {
+ String[] line = csv.readNextSilently(); // Eliminate header
+ while (csv.peek() != null) {
+ line = csv.readNext();
+ contentLineConsumer.accept(line);
+ }
+ }
+ } catch (CsvValidationException e) {
+ throw new IOException("Invalid csv file for lines", e);
+ }
+ }
+
+ /** Main entry point for the extractor of IDF mobilite data into a network as
+ * defined by this application.
+ *
+ * @param args the arguments (expected one for the destination file) */
+ public static void main(String[] args) {
+
+ if (args.length != 1) {
+ LOGGER.severe("Invalid command line. Missing target file.");
+ return;
+ }
+
+ // Export content in required format
+ try (FileWriter writer = new FileWriter(args[0], StandardCharsets.UTF_8)) {
+ CSVWriterBuilder wBuilder = new CSVWriterBuilder(writer).withSeparator(';');
+ try (ICSVWriter csv = wBuilder.build()) {
+ // TODO write the content
+ }
+ } catch (IOException e) {
+ LOGGER.log(Level.SEVERE, e, () -> "Could not write in file " + args[1]);
+ }
+ }
+}