Flash facebook like érzékelése

Flash facebook like érzékelése
2012-01-15T15:37:03+01:00
2012-01-15T19:07:54+01:00
2022-11-24T09:20:35+01:00
stY
Helló!

Van egy flash facebook alkalmazásom , ami tökéletesen működik (login,logout,user profil kép megjelenítés, kép feltöltés stb... ) mindaddig, ameddig le nem kérdezem, hogy az aktuális user likeolta e már az alkalmazást.

A GraphAPI_Web_1_8_1.swc-t használom.

Ezt találtam máshol js-el, ezért így próbáltam átírva as3-ra:
Facebook.api('/me/likes', onLikeMegjott); function onLikeMegjott(valasz:Object,fail:Object):void { like.text="Méret: "+valasz.data.length.toString(); // Iterate and check against your id for (var i=0; i<valasz.data.length; i++) { if (valasz.data[i].id==APPIDM) { like.text = "Neked tetszik ez az alkalmazás!"; return; } } like.text = "Neked nem tetszik ez az alkalmazás."; return; }

Ha nézem a forgalmat, akkor látom is, hogy megjött a json adat, ami tartalmazza a user like-jait, mégsem történik semmi. Mármint még a "Méret: "-et sem írja ki. Érdekes...

Ha a like.text="Méret: "+valasz.data.length.toString(); résznél nem fűzöm hozzá a valasz.data.length.toString();-et, akkor a "Méret: " kiíródik, amúgy meg nem, és semmi más sem.

A kapott json adat amúgy így néz ki:


{ "data": [ { "name": "Hungary wants full access to Android Market", "category": "Community", "id": "143322042350134", "created_time": "2012-01-06T19:34:37+0000" }, { . . . .
Mutasd a teljes hozzászólást!
ez azt jelenti, hogy a valasz-nak nincs data property-je, hanem az maga egy tömb, elméletileg nem kellene 'as' operátorral explicite konvertálni, de lehet, hogy jobban jársz ha mégis, azaz:

// ... var items:Array = valasz as Array; like.text = "Méret: " + items.length.toString(); for (var i = 0; i < items.length; i++) { // ...
Mutasd a teljes hozzászólást!

  • Hali.

    Nem lehet, hogy a valasz-ban null-t kapsz? Ahogy nézem a GraphAPI forráskódját fail (ha a FacebookRequest nem success vagy a json data-ban megtalálható az error_code) esetén a valaszban null-t ad át és a fail-ba rakja a response json-t.
    Mutasd a teljes hozzászólást!
  • Helló!

    Mint írtam, Google chrome-ban nézem a forgalmat és ott megjön a válasz benne a json-al, annak egy részletét raktam itt be az előző hsz-embe.

    Vagy nem erre gondolsz?

    Amőgy tesztből megpróbáltam:

    if (valasz == null){ like.text = "NULL AZ ÉRTÉK"; } else like.text = "NEM NULL AZ ÉRTÉK";
    ez azt írja ki, hogy "NEM NULL AZ ÉRTÉK"
    Mutasd a teljes hozzászólást!
  • Most nem értem mi külömbség van ez:


    for (var i=0; i<valasz.data.length; i++) { if (valasz.data[i].id==APPIDM) { like.text = "Neked tetszik ez az alkalmazás!"; return; } }

    meg eközt:

    for (var index in valasz.data){ if (valasz.data[index].id=="199595903469532") { like.text = "Neked tetszik ez az alkalmazás!"; return; } }
    , mert miután átírtam a lentire, akkor már kiírja, hogy nekem még nem tetszik az oldal Kérdéses ,hogy azért mert be sem lép a ciklusba, vagy belép csak még tényleg nem likeoltam.
    Mutasd a teljes hozzászólást!
  • De erre gondoltam - ezek szerint nem null.

    Másik tipp: biztos kell ide ez a data:
    valasz.data.length
    ?

    Próbáld meg így:
    valasz.length

    Mivel mielőtt meghívja a callback-et a valasz-ba ezt rakja:
    var data:Object = ('data' in target.data) ? target.data.data : target.data;
    Mutasd a teljes hozzászólást!
  • Megpróbáltam ahogy írod, meg így data-val is, ugyanaz mind2 esetben a helyzet, a NEM NULL AZ ÉRTÉK BELEKERÜL A like.text-be, de nem cseréli ki sem arra hogy tetszik, sem arra, hogy nem tetszik.


    function onLikeMegjott(valasz:Object,fail:Object):void { if (valasz == null){ like.text = "NULL AZ ÉRTÉK"; } else like.text = "NEM NULL AZ ÉRTÉK"; for (var i=0; i<valasz.data.length; i++) { if (valasz.data[i].id==APPIDM) { like.text = "Neked tetszik ez az alkalmazás!"; return; } } like.text = "Neked nem tetszik ez az alkalmazás."; return; }

    Pedig legalább az egyikre ki kellene, nem ?
    Mutasd a teljes hozzászólást!
  • én első körben kiíratnám a 'valaszt', kódvázlat:

    dump(valasz); function dump(o:Object, n:uint = 0):void { var s = ""; for (var j:uint = 0; j < n; ++j) s += "\t"; for (var i in o) { trace(s, i, '=', o[i], '(', typeof(o[i]), ')'); if (o[i] is Object) { dump(o[i], n + 1); } } }

    a trace-t cseréld le értelemszerűen...
    Mutasd a teljes hozzászólást!
  • "
    Pedig legalább az egyikre ki kellene, nem ?
    "

    szerintem, ha ráfutsz egy hibára (például egy "TypeError: Error #1010: A term is undefined and has no properties."-re) a "for (var i=0; i<valasz.data.length; i++)"-ban, azaz a feltétel kiértékelésében, akkor már nem fog a 'like.text' értékadás lefutni a ciklus után (sem),

    azaz szerintem nincs a valasz-nak data property-je, vagy ha van, akkor annak nincs length-je... (bármennyire is úgy tűnt a forgalom monitorozása közben),
    Mutasd a teljes hozzászólást!
  • Ilyet kaptam:


    0=[object Object](object) category=Community(string) name=Hungary wants full access to Android Market(string) id=143322042350134(string) created_time=2012-01-06T19:34:37+0000(string)1=[object Object](object) category=Jewelry/watches(string) name=Extreme Silver(string) id=185491984869539(string) created_time=2011-12-09T18:01:10+0000(string)2=[object Object](object) category=Website(string) name=Magyar Labdarúgó Archívum(string) id=146473252125753(string) created_time=2011-11-...
    Mutasd a teljes hozzászólást!
  • ez azt jelenti, hogy a valasz-nak nincs data property-je, hanem az maga egy tömb, elméletileg nem kellene 'as' operátorral explicite konvertálni, de lehet, hogy jobban jársz ha mégis, azaz:

    // ... var items:Array = valasz as Array; like.text = "Méret: " + items.length.toString(); for (var i = 0; i < items.length; i++) { // ...
    Mutasd a teljes hozzászólást!
  • Közben így már szerintem jó lesz:


    for (var index in valasz){ if (valasz[index].id.toString()==APPIDM) { like.text = "Neked tetszik ez az alkalmazás!"; return; } }
    Mutasd a teljes hozzászólást!
  • azaz a valasz-ban magát a data objektumot kaptad meg...
    Mutasd a teljes hozzászólást!
  • bocsánat, értelemszerűen a továbbiakban a valasz.data - helyett az items-re kell hivatkozni,
    Mutasd a teljes hozzászólást!
  • igen, így is bejárható,
    Mutasd a teljes hozzászólást!
  • Köszönöm!
    Mutasd a teljes hozzászólást!
Tetszett amit olvastál? Szeretnél a jövőben is értesülni a hasonló érdekességekről?
abcd