I meant Google Groups. It ruins code formatting. On Tue, Jun 16, 2009 at 12:34 PM, harry mendell <harry.mend...@gmail.com>wrote:
> > THANKS! I' about to try this but your comment about groups went right > over my head. What do you mean? > > PS I hope you understand that my side comments are intended to amuse > and put a little perspective on whats important. not insult. > On Jun 16, 2009, at 3:00 PM, Eric (Google) wrote: > > > > > Groups is going to make this an absolute mess, > > but here is my test script: > > > > using System; > > using System.Collections.Generic; > > using System.Linq; > > using System.Text; > > using Google.GData.Documents; > > using Google.GData.Client; > > using Google.GData.Extensions; > > using System.IO; > > using System.Collections; > > using Google.Documents; > > > > namespace ConsoleApplication1 > > { > > class Program > > { > > static public DocumentsService service = null; > > > > public static Hashtable GDocumentsAllowedTypes; > > > > /// <summary> > > /// Static constructor used to initialize GDocumentsAllowedTypes. > > /// </summary> > > static Program() > > { > > GDocumentsAllowedTypes = new Hashtable(); > > GDocumentsAllowedTypes.Add("CSV", "text/csv"); > > GDocumentsAllowedTypes.Add("TAB", "text/tab-separated- > > values"); > > GDocumentsAllowedTypes.Add("TSV", "text/tab-separated- > > values"); > > GDocumentsAllowedTypes.Add("TXT", "text/plain"); > > GDocumentsAllowedTypes.Add("HTML", "text/html"); > > GDocumentsAllowedTypes.Add("HTM", "text/html"); > > GDocumentsAllowedTypes.Add("DOC", "application/msword"); > > GDocumentsAllowedTypes.Add("DOCX", "application/msword"); > > GDocumentsAllowedTypes.Add("ODS", "application/x- > > vnd.oasis.opendocument.spreadsheet"); > > GDocumentsAllowedTypes.Add("ODT", "application/ > > vnd.oasis.opendocument.text"); > > GDocumentsAllowedTypes.Add("RTF", "application/rtf"); > > GDocumentsAllowedTypes.Add("SXW", "application/ > > vnd.sun.xml.writer"); > > GDocumentsAllowedTypes.Add("XLSX", "application/vnd.ms- > > excel"); > > GDocumentsAllowedTypes.Add("XLS", "application/vnd.ms-excel"); > > GDocumentsAllowedTypes.Add("PPT", "application/vnd.ms- > > powerpoint"); > > GDocumentsAllowedTypes.Add("PPS", "application/vnd.ms- > > powerpoint"); > > GDocumentsAllowedTypes.Add("PDF", "application/pdf"); > > } > > > > static void Main(string[] args) > > { > > service = new DocumentsService("companyName-AppName- > > versionNum"); > > service.setUserCredentials("u...@gmail.com", "password"); > > service.QueryAuthenticationToken(); // Authenticate the user > > immediately > > > > DocumentsFeed doclistFeed = service.Query(new DocumentsListQuery > > ()); > > > > DocumentEntry entry = (DocumentEntry)doclistFeed.Entries[0]; > > Console.WriteLine("Updating " + entry.Title.Text); > > > > DocumentEntry updatedEntry = ReplaceDocContents(entry, "C:\ > > \replace.doc"); > > Console.WriteLine(entry.Title.Text + " Updated!"); > > Console.WriteLine("view at " + entry.AlternateUri.ToString()); > > > > Console.Read(); // hang > > } > > > > static public DocumentEntry ReplaceDocContents(DocumentEntry > > entryToUpdate, string replacementFileName) > > { > > DocumentEntry entry = null; > > > > FileInfo fileInfo = new FileInfo(replacementFileName); > > FileStream stream = fileInfo.Open(FileMode.Open, > > FileAccess.Read, FileShare.ReadWrite); > > > > try > > { > > //convert the extension to caps and strip the "." off the > > front > > string ext = fileInfo.Extension.ToUpper().Substring(1); > > > > String contentType = (String)GDocumentsAllowedTypes[ext]; > > > > if (contentType == null) > > { > > throw new ArgumentException("File extension '" + ext + "' > > is not recognized as valid."); > > } > > GDataRequestFactory factory = (GDataRequestFactory) > > service.RequestFactory; > > factory.CustomHeaders.Add("If-Match: " + entryToUpdate.Etag); > > service.RequestFactory = factory; > > > > entry = service.Update(new Uri(entryToUpdate.MediaUri.ToString > > ()), > > stream, contentType, > > entryToUpdate.Title.Text) as DocumentEntry; > > } > > finally > > { > > stream.Close(); > > } > > > > return entry; > > } > > } > > } > > > > Eric > > > > On Jun 16, 11:41 am, harry mendell <harry.mend...@gmail.com> wrote: > >> OK, I will do that, but in my interest for self-preservation I would > >> like to be able to get something working today. I almost considered > >> hiring a temp to hit the update button onthe docs update button on > >> the > >> docs.google.com page every minute (LOL), I also thought of using > >> Amazon's mechanical turk and offer .05 an upload :) > >> > >> Since we have gone so far with this to you have anything else I can > >> try before my surrender? > >> On Jun 16, 2009, at 1:59 PM, Eric Bidelman wrote: > >> > >> > >> > >>> See my earlier reply. Java and Python are the most complete w.r.t. > >>> examples > >>> and code snippets in the docs: > >>> http://code.google.com/apis/documents/docs/2.0/ > >>> developers_guide_java.... > >>> http://code.google.com/apis/documents/docs/1.0/developers_guide_pytho > >>> ... > >> > >>> E > >> > >>> On Tue, Jun 16, 2009 at 8:00 AM, harry mendell > >>> <harry.mend...@gmail.com > >>>> wrote: > >>> Stuck again! Do any of the new apis support all of the high level > >>> client code, If so I'm hitting the ejector seat button. I don't care > >>> if I have to learn a new language from scratch be it "ruby on rails > >>> or whatever", the whole point of this exercise is to make developing > >>> new apps a " LEGO kit". Otherwise I am going to have to really study > >>> these low level protocols. It reminds me of my old assembler days. > >>> The more things change the more they remain the same. At least I can > >>> see from the other forum posts that I am not alone in my > >>> frustration. Step back for a second. Almost all of the forum > >>> questions involve what is essentially reading and writing data. I > >>> thought that was solved in the 1960s :) > >> > >>> I have a suggestion. Take all of the classes/methods that allow > >>> public and published data and produce a private and behind the > >>> firewall version that does exactly the same thing. Boom! Problems > >>> solved at once and I'll have a chance using Google internally. - > >>> Harry > >> > >>> In the mean time could you please sherpa me to mid-base? > >>> On Jun 15, 2009, at 7:50 PM, Eric Bidelman wrote: > >> > >>>> That 3rd parameter to update is a mimetype, not an file extension. > >>>> That's the GDocumntsAllowedType hashmap takes care of :) > >> > >>>> try: text/csv > >> > >>>> Eric > >> > >>>> On Mon, Jun 15, 2009 at 4:35 PM, harry mendell > >>>> <harry.mend...@gmail.com > >>>>> wrote: > >>>> Google.GData.Client.GDataRequestException was unhandled > >>>> Message="Execution of request failed: > http://docs.google.com/feeds/media/private/full/spreadsheet:rqfFdRlpa > >>>> ... > >>>> " > >>>> Source="Google.GData.Client" > >>>> ResponseString="Malformed Content-Type" > >>>> StackTrace: > >>>> at Google.GData.Client.GDataRequest.Execute() > >>>> at Google.GData.Client.GDataGAuthRequest.Execute(Int32 > >>>> retryCounter) > >>>> at Google.GData.Client.GDataGAuthRequest.Execute() > >>>> at Google.GData.Client.Service.StreamSend(Uri targetUri, > >>>> Stream inputStream, GDataRequestType type, String contentType, > >>>> String slugHeader, String etag, AsyncSendData data) > >>>> at Google.GData.Client.Service.StreamSend(Uri targetUri, > >>>> Stream inputStream, GDataRequestType type, String contentType, > >>>> String slugHeader) > >>>> at Google.GData.Client.Service.Update(Uri uriTarget, Stream > >>>> input, String contentType, String slugHeader) > >>>> at myfirstcsharp.Program.Main(String[] args) in C:\Documents > >>>> and Settings\harry\My Documents\Visual Studio 2008\Projects > >>>> \updatesheet\myfirstcsharp\Program.cs:line 54 > >>>> at System.AppDomain._nExecuteAssembly(Assembly assembly, > >>>> String[] args) > >>>> at System.AppDomain.nExecuteAssembly(Assembly assembly, > >>>> String[] args) > >>>> at System.Runtime.Hosting.ManifestRunner.Run(Boolean > >>>> checkAptModel) > >>>> at System.Runtime.Hosting.ManifestRunner.ExecuteAsAssembly() > >>>> at > >>>> System > >>>> .Runtime > >>>> .Hosting.ApplicationActivator.CreateInstance(ActivationContext > >>>> activationContext, String[] activationCustomData) > >>>> at > >>>> System > >>>> .Runtime > >>>> .Hosting.ApplicationActivator.CreateInstance(ActivationContext > >>>> activationContext) > >>>> at System.Activator.CreateInstance(ActivationContext > >>>> activationContext) > >>>> at > >>>> Microsoft > >>>> .VisualStudio.HostingProcess.HostProc.RunUsersAssemblyDebugInZone() > >>>> at System.Threading.ThreadHelper.ThreadStart_Context(Object > >>>> state) > >>>> at System.Threading.ExecutionContext.Run(ExecutionContext > >>>> executionContext, ContextCallback callback, Object state) > >>>> at System.Threading.ThreadHelper.ThreadStart() > >>>> InnerException: System.Net.WebException > >>>> Message="The remote server returned an error: (400) Bad > >>>> Request." > >>>> Source="System" > >>>> StackTrace: > >>>> at System.Net.HttpWebRequest.GetResponse() > >>>> at Google.GData.Client.GDataRequest.Execute() > >>>> InnerException: > >> > >>>> On Jun 15, 2009, at 6:49 PM, Eric Bidelman wrote: > >> > >>>>> Sorry. The definition of GDocumntsAllowedType is in the lib's > >>>>> source: > >>>>> > http://code.google.com/p/google-gdata/source/browse/trunk/clients/cs/ > >>>>> ... > >> > >>>>> What is the exception/response from the server? > >> > >>>>> Eric > >> > >>>>> On Mon, Jun 15, 2009 at 3:37 PM, harry mendell > >>>>> <harry.mend...@gmail.com > >>>>>> wrote: > >> > >>>>> Dear Eric, > >>>>> I tried adapting your code and wrote a test which I copied > >>>>> below. It fails at > >>>>> DocumentEntry entry = service.Update(new > >>>>> Uri(lastUploadEntry.MediaUri.ToString()), stream, "CSV", > >>>>> lastUploadEntry.Title.Text) as DocumentEntry; > >>>>> which is almost at the bottom. I think I'm having a some code of > >>>>> compatibility issue between the ACL and token auth, but this end > >>>>> of the pool is pretty deep. > >>>>> Would you mind taking a look? > >>>>> Thanks, > >>>>> Harry > >> > >>>>> using System; > >>>>> using System.IO; > >>>>> using System.Collections; > >>>>> using System.Net; > >>>>> using System.Collections.Generic; > >>>>> using Google.Spreadsheets; > >>>>> using System.Linq; > >>>>> using System.Text; > >>>>> using Google.GData.Documents; > >>>>> using Google.GData.Client; > >>>>> using Google.GData.Extensions; > >> > >>>>> namespace myfirstcsharp > >>>>> { > >> > >>>>> class Program > >>>>> { > >>>>> static void Main(string[] args) > >>>>> { > >>>>> DocumentsService service = new DocumentsService("HBM- > >>>>> DocListUploader-1"); > >> > >>>>> ((GDataRequestFactory)service.RequestFactory).KeepAlive = false; > >>>>> service.setUserCredentials("qvtuat", "qvtqvtqvt"); > >>>>> //force the service to authenticate > >>>>> DocumentsListQuery query = new DocumentsListQuery(); > >>>>> query.NumberToRetrieve = 1; > >>>>> service.Query(query); > >> > >>>>> // For testing only. Creates document called radar.csv > >>>>> DocumentEntry lastUploadEntry = > >>>>> service.UploadDocument("c:/radar.csv", "radar.csv"); > >>>>> // For testing only. Now lets see if we can update it > >>>>> FileInfo fileInfo = new FileInfo("c:/radar.csv"); > >>>>> FileStream stream = fileInfo.Open(FileMode.Open, > >>>>> FileAccess.Read, FileShare.ReadWrite); > >> > >>>>> try > >>>>> { > >>>>> /* It didn't recogize GDocumntsAllowedType so I > >>>>> commented the check since I know its good type > >>>>> // convert the extension to caps and strip the "." > >>>>> off the front > >>>>> string ext = > >>>>> fileInfo.Extension.ToUpper().Substring(1); > >>>>> String contentType = > >>>>> (String)GDocumentsAllowedTypes[ext]; > >> > >>>>> if (contentType == null) > >>>>> { > >>>>> throw new ArgumentException("File extension '" > >>>>> + ext + "' is not recognized as valid."); > >>>>> } > >>>>> // Make sure we don't overwrite someone else's > >>>>> changes. Use entry's ETag > >>>>> */ > >>>>> GDataRequestFactory factory = > >>>>> (GDataRequestFactory)service.RequestFactory; > >>>>> factory.CustomHeaders.Add("If-Match: " + > >>>>> lastUploadEntry.Etag); > >>>>> service.RequestFactory = factory; > >>>>> DocumentEntry entry = service.Update(new > >>>>> Uri(lastUploadEntry.MediaUri.ToString()), stream, "CSV", > >>>>> lastUploadEntry.Title.Text) as DocumentEntry; > >>>>> } > >>>>> finally > >>>>> { > >>>>> stream.Close(); > >>>>> } > >>>>> } > >>>>> } > >>>>> } > >> > >>>>> On Jun 11, 2009, at 5:16 PM, Eric (Google) wrote: > >> > >>>>>> This worked for me: > >> > >>>>>> DocumentsService service = new DocumentsService("yourCompany- > >>>>>> AppName- > >>>>>> v1"); > >>>>>> // TODO: Fetch DocumentEntry > >>>>>> ReplaceDocContents(entryToUpdate, "C:\somewhere\test.doc"); > >>>>>> ... > >> > >>>>>> static public DocumentEntry ReplaceDocContents(DocumentEntry > >>>>>> entryToUpdate, string replacementFileName) > >>>>>> { > >>>>>> DocumentEntry entry = null; > >> > >>>>>> FileInfo fileInfo = new FileInfo(replacementFileName); > >>>>>> FileStream stream = fileInfo.Open(FileMode.Open, > >>>>>> FileAccess.Read, > >>>>>> FileShare.ReadWrite); > >> > >>>>>> try > >>>>>> { > >>>>>> // convert the extension to caps and strip the "." off the > >>>>>> front > >>>>>> string ext = fileInfo.Extension.ToUpper().Substring(1); > >> > >>>>>> String contentType = (String)GDocumentsAllowedTypes[ext]; > >> > >>>>>> if (contentType == null) > >>>>>> { > >>>>>> throw new ArgumentException("File extension '" + ext + > >>>>>> "' is not recognized as > >>>>>> valid."); > >>>>>> } > >> > >>>>>> // Make sure we don't overwrite someone else's changes. Use > >>>>>> entry's ETag > >>>>>> GDataRequestFactory factory = (GDataRequestFactory) > >>>>>> service.RequestFactory; > >>>>>> factory.CustomHeaders.Add("If-Match: " + entryToUpdate.Etag); > >>>>>> service.RequestFactory = factory; > >> > >>>>>> entry =... > >> > >> read more ยป > > > > > > > > --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Google Docs Data APIs" group. To post to this group, send email to Google-Docs-Data-APIs@googlegroups.com To unsubscribe from this group, send email to google-docs-data-apis+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/Google-Docs-Data-APIs?hl=en -~----------~----~----~----~------~----~------~--~---