Vinnaren i pepparkakshustävlingen!
2018-01-02, 20:22
  #1
Medlem
Har sista året använt mig av fox2chrome-tags för att få med alla tags när jag exporterar Firefoxs bokmärkesfil till html. Programmet fungera bra, men har upptäckt att jag verkligen saknar datumstämpeln på bokmärkena.

Har tittat igenom filerna för att se vad man eventuellt skulle kunna ändra för att få med datumet, dvs ADD_DATE exporterat i antalet sekunder sedan 1 jan 1970 (är tydligen Netscapes gamla bokmärkesformat som används) i stället för ="0" som det blir nu, men eftersom jag inte kan Java/koda så är troligt att jag missat om det existerar något lätt sätt att fixa det på.

Några förslag?
Citera
2018-01-02, 20:27
  #2
Medlem
Här kommer koden också

Kod:
import java.util.*;

public class Bookmark {
	String title;
	String uri;
	HashSet<String> tags = new HashSet<String>();
	
	public Bookmark(String title, String uri) {
		this.title = title;
		this.uri = uri;
	}
	
	/*
	 * Assume:
	 * Same URI = Same Bookmark
	 */
	@Override
	public boolean equals(Object o) {
		if (! (o instanceof Bookmark)) return false;
		Bookmark b = (Bookmark) o;
		
		if (this.uri.equals(b.uri) && this.title.equals(b.title)) {
			return true;
		} else {
			return false;
		}
	}
	
	/*
	 * Print the bookmark in form:
	 * Title[list, of, tags]
	 */
	@Override
	public String toString() {
		StringBuilder s = new StringBuilder(title).append(" [");
		
		StringBuilder taglist = new StringBuilder();
		for (String tag : tags) {
			if (taglist.length() != 0) {
				taglist.append(", ");
			}
			taglist.append(tag);
		}

		s.append(taglist).append("]");
		return s.toString();
	}
}

Kod:
import java.io.*;
import java.util.*;
import org.json.simple.*;
import org.json.simple.parser.*;

public class FirefoxToChrome {
	public static void main(String[] args) throws IOException,ParseException {
		if (args.length < 2) {
			System.out.println("USAGE:\njava FirefoxToChrome infile.json outfile.html");
			System.exit(0);
		}
		
		/*
		 * Read and parse file
		 */
		File inputFile = new File(args[0]);
		JSONObject placesRoot = (JSONObject) JSONValue.parseWithException(new FileReader(inputFile));
		ArrayList<Bookmark> bookmarksList = new ArrayList<Bookmark>();
		
		extractPlaces(placesRoot, bookmarksList);
		
		writeHTMLFile(args[1], bookmarksList);
	}
	
	public static void extractPlaces(JSONObject root, ArrayList<Bookmark> bookmarksList) {
		if (root.get("type").equals("text/x-moz-place-container")) {
			// recursion
			JSONArray rootChildren = (JSONArray) root.get("children");
			if (rootChildren != null) {
				for (Object child : rootChildren) {
					extractPlaces((JSONObject)child, bookmarksList);
				}
			}
		} else if (root.get("type").equals("text/x-moz-place")) {
			JSONObject place = root;
			
			String title = (String)place.get("title");
			String uri = (String)place.get("uri");
			String tags = (String)place.get("tags");
			
			// ignore firefox-specific folders etc.
			if (uri.startsWith("place:")) return;
			
			Bookmark currentBookmark = new Bookmark(title, uri);
			if (tags != null) {
				currentBookmark.tags.addAll(Arrays.asList(tags.split(",")));
			}

			if (! bookmarksList.contains(currentBookmark)) {
				// create a new Bookmark
				bookmarksList.add(currentBookmark);
			} else {
				// same bookmark. Merge tags into it.
				int index = bookmarksList.indexOf(currentBookmark);
				Bookmark oldBookmark = bookmarksList.get(index);
				oldBookmark.tags.addAll(currentBookmark.tags);
			}
		}
	}
	
	public static void writeHTMLFile(String filename, ArrayList<Bookmark> bookmarksList) throws IOException {
		PrintWriter pw = new PrintWriter(new FileWriter(new File(filename)));
		
		// header
		pw.println("<!DOCTYPE NETSCAPE-Bookmark-file-1>\n<META HTTP-EQUIV=\"Content-Type\" CONTENT=\"text/html; charset=UTF-8\">\n<TITLE>Bookmarks</TITLE>\n<H1>Bookmarks</H1>\n<DL><p>\n\t<DT><H3 ADD_DATE=\"0\" LAST_MODIFIED=\"0\" PERSONAL_TOOLBAR_FOLDER=\"true\">Bookmarks Bar</H3>\n\t<DL><p>\n\t</DL><p>");
		
		// bookmarks
		for (Bookmark b : bookmarksList) {
			pw.println("\t<DT><A HREF=\"" + b.uri + "\" ADD_DATE=\"0\" LAST_VISIT=\"0\" LAST_MODIFIED=\"0\">" + b.toString() + "</A>");
		}
		
		// footer
		pw.println("</DL><p>");
		
		pw.flush();
		pw.close();
	}
}

och README
Citat:
fox2chrome-tags
===============

Converts a Firefox bookmarks.json to a Chrome bookmarks.html and appends the tags to bookmarks' names.
Firefox folder structure is ignored. Everything is thrown into one folder.

The generated bookmarks-HTML is designed for Chrome but should work with most other browsers or bookmark services as well. It is a `<!DOCTYPE NETSCAPE-Bookmark-file-1>` file

Syntax
======
Bookmarks are output to chrome with the following naming syntax:
`Bookmark Name[list, of, tags]`
So all the information is merged into the bookmarks name.

Usage
=====

1. Backup Firefox Bookmarks to json file
2. `javac FirefoxToChrome.java`
3. `java FirefoxToChrome infile.json outfile.html`
4. Import html file with Chrome.

Third party libraries
=====================
- [json-simple](https://code.google.com/p/json-simple/)

Many thanks to these libraries' authors and contributors.
Citera
2018-01-02, 20:44
  #3
Medlem
XaoqcHs avatar
Lägg in en feature request/issue via Github eller kontakta snällt repos-ansvarige.
Citera
2018-01-02, 21:07
  #4
Medlem
Citat:
Ursprungligen postat av XaoqcH
Lägg in en feature request/issue via Github eller kontakta snällt repos-ansvarige.
Okej, visste inte om att man kunde lägga feature requests på GitHub, så det var ju bra att och få veta.
Citera

Stöd Flashback

Flashback finansieras genom donationer från våra medlemmar och besökare. Det är med hjälp av dig vi kan fortsätta erbjuda en fri samhällsdebatt. Tack för ditt stöd!

Stöd Flashback