Skip to content

Instantly share code, notes, and snippets.

@AndyMoreland
Created April 9, 2013 22:18
Show Gist options
  • Save AndyMoreland/5349939 to your computer and use it in GitHub Desktop.
Save AndyMoreland/5349939 to your computer and use it in GitHub Desktop.
(ns magic-cards.core
(:use [jsoup.soup])
(:require [com.andymoreland.GoogleSpreadsheet SpreadsheetUpdater])
(:gen-class
:name com.andymoreland.magic
:methods [#^{:static true} [fetchLowestPrice [String] float]]))
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
(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"])
// 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