Oh, yeh, I have to tape the lines back together. Just a general observation, I've worked with each tech wave thats gone by since the transistor and plug-wire programs, keying in machine code, paper tape, punch cards, dec tape, KSR33 Teletype machines, IBM timesharing, minicomputers, punch cards .... you get the idea, and every time its much better, worth switching, BUT its never easy. Why? Because the guys inventing the new stuff ignore the old problems and they come back and bite you in the you know what everytime :) Thanks again for the help and patients with the old curmudgeon. I'm a big fan of what you guys are doing! On Jun 16, 2009, at 4:14 PM, Eric Bidelman wrote:
> 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 -~----------~----~----~----~------~----~------~--~---