[jQuery] Hoe vind ik het 2e link attribuut?

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • Reveller
  • Registratie: Augustus 2002
  • Laatst online: 05-12-2022
De Twitter search atom heeft de volgende vorm:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
<?xml version="1.0" encoding="UTF-8"?>
<feed xmlns:google="http://base.google.com/ns/1.0" xml:lang="en-US" xmlns:openSearch="http://a9.com/-/spec/opensearch/1.1/" xmlns="http://www.w3.org/2005/Atom" xmlns:twitter="http://api.twitter.com/">
  <id>tag:search.twitter.com,2005:search/$goog</id>
  <link type="text/html" href="http://search.twitter.com/search?q=%24goog" rel="alternate"/>
  <link type="application/atom+xml" href="http://search.twitter.com/search.atom?q=$goog" rel="self"/>
  <title>$goog - Twitter Search</title>
  <link type="application/opensearchdescription+xml" href="http://search.twitter.com/opensearch.xml" rel="search"/>
  <link type="application/atom+xml" href="http://search.twitter.com/search.atom?q=%24goog&amp;since_id=12338503698" rel="refresh"/>
  <twitter:warning>since_id removed for pagination.</twitter:warning>
  <updated>2010-04-17T12:21:37Z</updated>
  <openSearch:itemsPerPage>15</openSearch:itemsPerPage>
  <link type="application/atom+xml" href="http://search.twitter.com/search.atom?max_id=12338503698&amp;page=2&amp;q=%24goog" rel="next"/>
  <entry>
    <id>tag:search.twitter.com,2005:12336213327</id>
    <published>2010-04-17T11:07:50Z</published>
    <link type="text/html" href="http://twitter.com/sizzleindex/statuses/12336213327" rel="alternate"/>
    <title>The Motley Fool's Weekly Editors' Picks (at Motley Fool):  http://bit.ly/cQn2w0 $goog $aapl</title>
    <content type="html">The Motley Fool&amp;apos;s Weekly Editors&amp;apos; Picks (at Motley Fool):  &lt;a href=&quot;http://bit.ly/cQn2w0&quot;&gt;http://bit.ly/cQn2w0&lt;/a&gt; &lt;b&gt;$goog&lt;/b&gt; $aapl</content>
    <updated>2010-04-17T11:07:50Z</updated>
    <link type="image/png" href="http://a3.twimg.com/profile_images/745027829/bullmarket_normal.jpg" rel="image"/>
    <twitter:geo>
    </twitter:geo>
    <twitter:metadata>
      <twitter:result_type>recent</twitter:result_type>
    </twitter:metadata>
    <twitter:source>&lt;a href=&quot;http://twitterfeed.com&quot; rel=&quot;nofollow&quot;&gt;twitterfeed&lt;/a&gt;</twitter:source>
    <twitter:lang>en</twitter:lang>
    <author>
      <name>sizzleindex (Profit From Trading)</name>
      <uri>http://twitter.com/sizzleindex</uri>
    </author>
  </entry>
  ...knip!

Met behulp van onderstaande jQuery code haal ik (via php curl) deze zoekresultaten binnen en loop ik erdoorheen:
JavaScript:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
function getSearch() {
  var results = "";
  var theQuery = $('textarea[name=symbols]').val();
  $.post("getSearch.php", {query: theQuery}, function(xml) {
    $('entry',xml).each(function(i) {
      var title = $(this).find("content").text();
      var linktype = $(this).find("link").attr("type");
      alert(linktype);
      results = results + title + "<br>";
    });
    $("#tweets").html(results);
  });
  $('#countdown').countdown({seconds: 30, callback: 'getSearch()'});
}

Probleem: zowel in regel 4 als 8 staat een "link" attribuut, zij de eerste met type "text/html" en de tweede met "image/png". Ik wil in de loop de href-value van de tweede link pakken, in dit geval dus:
code:
1
http://a3.twimg.com/profile_images/745027829/bullmarket_normal.jpg

Het vreemde is alleen (zie jQuery code) dat de alert alleen de eerste link ("text/html") alert; het tweede link attribuut wordt niet ge-alert. Mijn vraag is: weet iemand waarom?

"Real software engineers work from 9 to 5, because that is the way the job is described in the formal spec. Working late would feel like using an undocumented external procedure."


Acties:
  • 0 Henk 'm!

  • MoBi
  • Registratie: Oktober 1999
  • Laatst online: 14-09 09:44
Omdat je maar 1 keer in de entry kijkt en er 2 links staan. Je zal binnen de entry loop nog een keer een link loop moeten doen.

Volgens mij zit je te lullen, want ik voel nattigheid....


Acties:
  • 0 Henk 'm!

  • Reveller
  • Registratie: Augustus 2002
  • Laatst online: 05-12-2022
MoBi schreef op zaterdag 17 april 2010 @ 15:04:
Omdat je maar 1 keer in de entry kijkt en er 2 links staan. Je zal binnen de entry loop nog een keer een link loop moeten doen.
...idee! Gebruik een betere selector :)
JavaScript:
1
$(this).find("link[type=image/png]").attr("href");

[ Voor 8% gewijzigd door Reveller op 17-04-2010 16:15 ]

"Real software engineers work from 9 to 5, because that is the way the job is described in the formal spec. Working late would feel like using an undocumented external procedure."


Acties:
  • 0 Henk 'm!

  • Reveller
  • Registratie: Augustus 2002
  • Laatst online: 05-12-2022
Nog een vraag, want hier kom ik niet uit:
JavaScript:
1
2
var author = $(this).find("name").text();
// sizzleindex (Profit From Trading), zie xml uit topic start

Ik wil nu deze string in een array splitsen, als volgt:
code:
1
2
3
4
name(
  0 => sizzleindex,
  1 => Profit From Trading
);

Hiertoe tracht ik eerst de tekst tussen de haakjes te pakken:
JavaScript:
1
2
var name = author.match(/((.*?))/);
// name[0] = ''', name[1] = null

Wat doe ik hier verkeerd? De regex zou imho alle tekst tussen ( en ) moeten pakken en dit resultaat in name moeten stoppen, maar helaas. Kan iemand mij opweg helpen?

"Real software engineers work from 9 to 5, because that is the way the job is described in the formal spec. Working late would feel like using an undocumented external procedure."


Acties:
  • 0 Henk 'm!

  • Soultaker
  • Registratie: September 2000
  • Laatst online: 01:39
Haakjes hebben een speciale betekenis in reguliere expressies (namelijk om expressies te groeperen). /(x)/ matcht daardoor hetzelfde als /x/. Als je letterlijk haakjes wil matchen moet je ze escapen met een backslash of in een character class zetten. In je voorbeeld wordt dat dus \((.*?)\) of [(](.*?)[)] of een combinatie van de twee.

Acties:
  • 0 Henk 'm!

  • crisp
  • Registratie: Februari 2000
  • Laatst online: 11:02

crisp

Devver

Pixelated

Waarom wil je de feed trouwens clientside gaan parsen? Persoonlijk zou ik de feed serverside al parsen en in een veel handiger formaat als JSON naar de client sturen.

Intentionally left blank


Acties:
  • 0 Henk 'm!

  • Reveller
  • Registratie: Augustus 2002
  • Laatst online: 05-12-2022
crisp schreef op zondag 18 april 2010 @ 11:41:
Waarom wil je de feed trouwens clientside gaan parsen? Persoonlijk zou ik de feed serverside al parsen en in een veel handiger formaat als JSON naar de client sturen.
Tja, ik begon clientside en heb dat maar doorgevoerd. Heb wel gedacht aan serverside, maar wat is daar dan het voordeel van? Nu doet de client het werk van de server :) Waarom zou jij toch voor serverside kiezen?

"Real software engineers work from 9 to 5, because that is the way the job is described in the formal spec. Working late would feel like using an undocumented external procedure."


Acties:
  • 0 Henk 'm!

  • CH4OS
  • Registratie: April 2002
  • Niet online

CH4OS

It's a kind of magic

Reveller schreef op zondag 18 april 2010 @ 12:39:
Tja, ik begon clientside en heb dat maar doorgevoerd. Heb wel gedacht aan serverside, maar wat is daar dan het voordeel van? Nu doet de client het werk van de server :) Waarom zou jij toch voor serverside kiezen?
In ieder geval kan je de output genereren die je écht wilt hebben. Bij een client weet je maar nooit en als JS uit staat bij de client ben je het haasje.

Acties:
  • 0 Henk 'm!

Verwijderd

crisp schreef op zondag 18 april 2010 @ 11:41:
Waarom wil je de feed trouwens clientside gaan parsen? Persoonlijk zou ik de feed serverside al parsen en in een veel handiger formaat als JSON naar de client sturen.
Twitter ondersteund ook JSON, je kan dus gewoon JSON aanvragen ipv atom. klik!
Pagina: 1