Created
April 9, 2013 22:18
-
-
Save AndyMoreland/5349939 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
(ns magic-cards.core | |
(:use [jsoup.soup]) | |
(:require [com.andymoreland.GoogleSpreadsheet SpreadsheetUpdater]) | |
(:gen-class | |
:name com.andymoreland.magic | |
:methods [#^{:static true} [fetchLowestPrice [String] float]])) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
src $ lein compile | |
Compiling 1 source files to /Users/andrew/clojure/magic-cards/target/classes | |
Compiling magic-cards.core | |
Exception in thread "main" java.io.FileNotFoundException: Could not locate com/andymoreland/GoogleSpreadsheet/SpreadsheetUpdater__init.class or com/andymoreland/GoogleSpreadsheet/SpreadsheetUpdater.clj on classpath: , compiling:(core.clj:1) | |
at clojure.lang.Compiler$InvokeExpr.eval(Compiler.java:3387) | |
at clojure.lang.Compiler.compile1(Compiler.java:7035) | |
at clojure.lang.Compiler.compile1(Compiler.java:7025) | |
at clojure.lang.Compiler.compile(Compiler.java:7097) | |
at clojure.lang.RT.compile(RT.java:387) | |
at clojure.lang.RT.load(RT.java:427) | |
at clojure.lang.RT.load(RT.java:400) | |
at clojure.core$load$fn__4890.invoke(core.clj:5415) | |
at clojure.core$load.doInvoke(core.clj:5414) | |
at clojure.lang.RestFn.invoke(RestFn.java:408) | |
at clojure.core$load_one.invoke(core.clj:5227) | |
at clojure.core$compile$fn__4895.invoke(core.clj:5426) | |
at clojure.core$compile.invoke(core.clj:5425) | |
at user$eval7.invoke(NO_SOURCE_FILE:1) | |
at clojure.lang.Compiler.eval(Compiler.java:6511) | |
at clojure.lang.Compiler.eval(Compiler.java:6501) | |
at clojure.lang.Compiler.eval(Compiler.java:6477) | |
at clojure.core$eval.invoke(core.clj:2797) | |
at clojure.main$eval_opt.invoke(main.clj:297) | |
at clojure.main$initialize.invoke(main.clj:316) | |
at clojure.main$null_opt.invoke(main.clj:349) | |
at clojure.main$main.doInvoke(main.clj:427) | |
at clojure.lang.RestFn.invoke(RestFn.java:421) | |
at clojure.lang.Var.invoke(Var.java:419) | |
at clojure.lang.AFn.applyToHelper(AFn.java:163) | |
at clojure.lang.Var.applyTo(Var.java:532) | |
at clojure.main.main(main.java:37) | |
Caused by: java.io.FileNotFoundException: Could not locate com/andymoreland/GoogleSpreadsheet/SpreadsheetUpdater__init.class or com/andymoreland/GoogleSpreadsheet/SpreadsheetUpdater.clj on classpath: | |
at clojure.lang.RT.load(RT.java:432) | |
at clojure.lang.RT.load(RT.java:400) | |
at clojure.core$load$fn__4890.invoke(core.clj:5415) | |
at clojure.core$load.doInvoke(core.clj:5414) | |
at clojure.lang.RestFn.invoke(RestFn.java:408) | |
at clojure.core$load_one.invoke(core.clj:5227) | |
at clojure.core$load_lib.doInvoke(core.clj:5264) | |
at clojure.lang.RestFn.applyTo(RestFn.java:142) | |
at clojure.core$apply.invoke(core.clj:603) | |
at clojure.core$load_libs.doInvoke(core.clj:5302) | |
at clojure.lang.RestFn.applyTo(RestFn.java:137) | |
at clojure.core$apply.invoke(core.clj:603) | |
at clojure.core$require.doInvoke(core.clj:5381) | |
at clojure.lang.RestFn.invoke(RestFn.java:408) | |
at magic_cards.core$loading__4784__auto__.invoke(core.clj:1) | |
at clojure.lang.AFn.applyToHelper(AFn.java:159) | |
at clojure.lang.AFn.applyTo(AFn.java:151) | |
at clojure.lang.Compiler$InvokeExpr.eval(Compiler.java:3382) | |
... 26 more | |
Compilation failed: Subprocess failed |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
(defproject magic-cards "0.1.0-SNAPSHOT" | |
:description "FIXME: write description" | |
:url "http://example.com/FIXME" | |
:license {:name "Eclipse Public License" | |
:url "http://www.eclipse.org/legal/epl-v10.html"} | |
:dependencies [[org.clojure/clojure "1.4.0"] | |
[clojure-soup "0.0.1"] | |
[com.google.gdata/core "1.47.1"]] | |
:aot [magic-cards.core] | |
:java-source-paths ["src/java/com/andymoreland/GoogleSpreadsheet"]) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// FOUND IN src/java/com/andymoreland/GoogleSpreadsheet/ | |
package com.andymoreland.GoogleSpreadsheet; | |
import java.io.IOException; | |
import java.net.URL; | |
import java.util.List; | |
import com.google.gdata.client.Service; | |
import com.google.gdata.client.spreadsheet.SpreadsheetService; | |
import com.google.gdata.data.BaseFeed; | |
import com.google.gdata.data.spreadsheet.ListEntry; | |
import com.google.gdata.data.spreadsheet.ListFeed; | |
import com.google.gdata.data.spreadsheet.SpreadsheetEntry; | |
import com.google.gdata.data.spreadsheet.SpreadsheetFeed; | |
import com.google.gdata.util.PreconditionFailedException; | |
import com.google.gdata.util.ServiceException; | |
/** | |
* Hello world! | |
* | |
*/ | |
public class SpreadsheetUpdater | |
{ | |
private static final String USERNAME = "EMAIL"; | |
private static final String PASSWORD = "PASSWORD"; | |
private static final String MAGIC_SPREADSHEAT = "Magic Cards"; | |
public static void main( String[] args ) throws IOException, ServiceException, InterruptedException | |
{ | |
SpreadsheetService service = | |
new SpreadsheetService("MySpreadsheetIntegration-v1"); | |
service.setUserCredentials(USERNAME, PASSWORD); | |
URL SPREADSHEET_FEED_URL = new URL( | |
"https://spreadsheets.google.com/feeds/spreadsheets/private/full"); | |
// Make a request to the API and get all spreadsheets. | |
SpreadsheetFeed feed = service.getFeed(SPREADSHEET_FEED_URL, SpreadsheetFeed.class); | |
List<SpreadsheetEntry> spreadsheets = feed.getEntries(); | |
SpreadsheetEntry magicSpreadsheet = null; | |
// Iterate through all of the spreadsheets returned | |
for (SpreadsheetEntry spreadsheet : spreadsheets) | |
if (spreadsheet.getTitle().getPlainText().equals(MAGIC_SPREADSHEAT)) | |
magicSpreadsheet = spreadsheet; | |
if (magicSpreadsheet == null) { | |
System.out.println("Unable to find magic spreadsheet"); | |
return; | |
} | |
while (true) | |
startUpdating(service, magicSpreadsheet); | |
} | |
private static void startUpdating(Service service, SpreadsheetEntry magicSpreadsheet) throws IOException, ServiceException, InterruptedException { | |
URL feedUrl = magicSpreadsheet.getWorksheets().get(1).getListFeedUrl(); | |
ListFeed listFeed = service.getFeed(feedUrl, ListFeed.class); | |
try { | |
updateRows(listFeed); | |
} catch (PreconditionFailedException ex) { | |
System.out.println ("Update Failed. Retrying."); | |
} | |
} | |
private static void updateRows(BaseFeed<ListFeed, ListEntry> listFeed) throws IOException, ServiceException, InterruptedException { | |
while (true) { | |
System.out.println("Scanning rows"); | |
for (ListEntry row : listFeed.getEntries()) { | |
String cardName = row.getCustomElements().getValue("Card"); | |
row.getCustomElements().setValueLocal("Price", cardName); | |
row.update(); | |
} | |
Thread.sleep(1000); | |
} | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment