Hi all,

If you send something invalid we do attempt to fix-up invalid requests rather than just 400. This looks like a case where the bad request becomes a different sort of badness on the way out. Escaping the quotes seems like the only real fix.

— Matt

On Mar 3, 2009, at 09:13 AM, Chad Etzel wrote:


Ok, I can replicate your results with curl

$ curl -v "http://search.twitter.com/search.json?q=\"exeter%20city\"";

...returns the wrong results, as you say.

$ curl -v "http://search.twitter.com/search.json?q=%22exeter%20city %22"

...returns the correct results.

I think double quotes are not actually valid URL characters (tho some
browsers try to treat them as such), so you should really turn " into
%22 before the requests go out.


That said, I'm starting to agree with Paul that twitter is doing some
sort of encoding trick on their end when literal quotes are sent in
the request:

$ curl -v http://search.twitter.com/search.json?q=\"exeter%20city\";
* About to connect() to search.twitter.com port 80 (#0)
*   Trying 128.121.146.107... connected
* Connected to search.twitter.com (128.121.146.107) port 80 (#0)
GET /search.json?q="exeter%20city" HTTP/1.1
User-Agent: curl/7.16.4 (i486-pc-linux-gnu) libcurl/7.16.4 OpenSSL/ 0.9.8e zlib/1.2.3.3 libidn/1.0
Host: search.twitter.com
Accept: */*

< HTTP/1.1 200 OK
< Date: Tue, 03 Mar 2009 17:09:34 GMT
< Server: hi
< Status: 200 OK
< Cache-Control: max-age=20, must-revalidate, max-age=300
< Content-Type: application/json; charset=utf-8
< X-Served-By: searchweb003.twitter.com
< Expires: Tue, 03 Mar 2009 17:14:34 GMT
< Content-Length: 195
< Vary: Accept-Encoding
< X-Varnish: 1733084231
< Age: 0
< Via: 1.1 varnish
< X-Cache-Svr: searchweb003.twitter.com
< X-Cache: MISS
< Connection: close
<
* Closing connection #0
{"results":[],"since_id":0,"max_id":1274236746,"refresh_url":"? since_id=1274236746&q=%22exeter%2520city%22","results_per_page": 15,"completed_in":0.112164,"page":1,"query":"%22exeter%2520city%22"}

Now, one could argue that the request itself is invalid or malformed,
and so the result may be undefined, but I do agree that something is
happening on twitter's end.


Moral of the story: encode " as %22 in URLs.

-Chad

On Tue, Mar 3, 2009 at 11:33 AM, Paul Kinlan <[email protected]> wrote:
Hi,

It works with the "+", but I knew that :)

With a space (in IE) it encodes it as %20 when it makes the request and I
can see it through fiddler (as below) and it comes back.

GET /search.json?q="exeter%20city" HTTP/1.1
Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg,
application/x-ms-application, application/vnd.ms-xpsdocument,
application/xaml+xml, application/x-ms-xbap, application/x- shockwave-flash, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword,
*/*
Accept-Language: en-gb
UA-CPU: x86
Accept-Encoding: gzip, deflate
User-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0; SLCC1; .NET CLR 2.0.50727; .NET CLR 3.5.21022; .NET CLR 3.5.30729; .NET CLR 3.0.30618;
InfoPath.2; OfficeLiveConnector.1.3; OfficeLivePatch.0.0)
Host: search.twitter.com
Connection: Keep-Alive
Cookie:
__utma =43838368.379476752167577530.1234449205.1234449205.1234449205.1; __utmz=43838368.1234449205.1.1.utmcsr=blog.twe2.com| utmccn=(referral)|utmcmd=referral|utmcct=/;
__utmv=43838368.lang%3A%20en_GB

I fully accept it is probably our client software that is not encoding
correcly, but I also tried this from the command line curl
"http://search.twitter.com/search.json?q=\"exeter%20city\""; the response comes back as %22exeter%2520city%22 in the json object. From my point of
view I know the quotes are not correct, but it looks like twitter is
encoding them when it recieves them. I belive our client API is sending
double quotes rather %22.

Kind Regards,
Paul

2009/3/3 Chad Etzel <[email protected]>

I also just tested searching "exeter city" in TweetGrid with IE,
FireFox, and Chrome. All came back with the same results.
fwiw,
-Chad

On Tue, Mar 3, 2009 at 11:14 AM, Matt Sanford <[email protected]> wrote:
Hi Paul,
   I just tested form the command line and everything seems fine
with: curl
'http://search.twitter.com/search.json?q=%22exeter%20city%22'
If you are typing %20 into the IE address bar it is likely try to correct your % (which is not a valid URL character) and making it %25
in
the request but displaying it correctly to you. Try replacing it with a
+ or
a space and see what you get.
Thanks;
 — Matt
- Show quoted text -
On Mar 3, 2009, at 08:06 AM, Paul Kinlan wrote:

Forgot to add, I am checking our client library now too.

Paul.

2009/3/3 Paul Kinlan <[email protected]>

Hi Matt,

I was typing the search term through IE (to test it after reports that
""
enclosed searches aren't working) as
http://search.twitter.com/search.json?q="exeter city" which it then
converts
to http://search.twitter.com/search.json?q="exeter%20city"; but the
result
came back as "%22exeter%2520city%22" (see json object below) in the
search
API json object.  It works in firefox so I am presuming firefox is
correctly
encoding the url.



{"results":[],"since_id":0,"max_id":1273765306,"refresh_url":"? since_id=1273765306&q=%22exeter%2520city%22","results_per_page": 15,"completed_in":1.313905,"page":1,"query":"%22exeter%2520city %22"}

it is highly likely that if IE is having the issue, the client API
would
probably have it, however the query that is going out over the wire (I checked with fiddler as "exeter%20city" and the result comes back as
above,
so I don't think it is us for the entire problem).

Kind Regards,
Paul.

2009/3/3 Matt Sanford <[email protected]>

Hi Paul,
It sounds like whatever is generating your API requests is double
URL
encoding. So the space becomes %20, and then on the second url
encoding the
% becomes a %25.
Thanks;
 — Matt Sanford / @mzsanford
On Mar 3, 2009, at 07:34 AM, Paul Kinlan wrote:

Hi,

I am noticing something that I think is odd at the moment.

Some of our users are not getting searches that are enclosed in quotes
via the API, yet they work directly from the website.

For example there is a difference between the following query on the
API
and Website:

http://search.twitter.com/search?q=%22exeter%20city%22 which has the
same
results as http://search.twitter.com/search?q=%22exeter+city%22

but returns a different result via the API using the following query

http://search.twitter.com/search.json?q="exeter%20city";

Looking at what is returned by the API the query looks like it has
been
transformed in to "%22exeter%2520city%22". To me the %2520 looks odd
when I
would expect %20

Kind Regards,
Paul Kinlan








Reply via email to