Grzesiek [ www eRepublik com PL ]
Tworzenie pluginu do FireFox'a - potrzebna pomoc :)
Potrzebujemy z kumplami napisać plugin do FF.
Odnośnie samego silnika, to wiemy co i jak, jakoś to sklecimy.
Jednak problem jest bardzo banalny - ciężko jest nam znaleźć jakiś konkretnie zebrany zbiór informacji dot. tego, jak zacząć pisać plugin :)
Czy ktoś się już zabierał za robienie pluginów do FF 3? Albo 2 chociaż?
Na razie google'uję, ale bez konkretnych efektów :(
Regis [ ]
Kiedy ja szukalem takich informacji, wpisanie w google 'firefox plugin tutorial' zalatwilo sprawe.
Grzesiek [ www eRepublik com PL ]
Jedyne czego się dowiedziałem to to, że nie plugin, ale rozszerzenie chcemy stworzyć :P
@Regis
Jak widać teraz to jakoś nie wystarcza ...
Szukam i szukam, i za cholerę nie mogę znaleźć jakiegoś aktualnego sample'a albo porządnego tutorialu.
Te oficjalne tak napisane, żeby nic nie zrozumieć chyba :P
Grzesiek [ www eRepublik com PL ]
^
Didier z Rivii [ life 4 sound ]
ktoś tutaj kiedys pisał plugin do ukrywania postów na golu, jakbys znalazl jego watek to pewnie dotarlbys do żródła ;)
maviozo [ Man with a movie camera ]
Tak, ale to też było na zasadzie dodatkowego skryptu do pluginu, a nie jako cały plugin:)
to było tutaj https://forumarchiwum.gry-online.pl/S043archiwum.asp?ID=8029220
Didier->wiesz, niby tak, ale Grzesiu nie napisał konkretnie do czego to ma służyć, a skrypt przetwarza tylko otwartą stronę wg schematu..
pecet007 [ - ]
z tego co wiem do tworzenia roszerzeń wystarcza duet JavaScript + XUL, choć samemu nigdy się z tym nie bawiłem ;)
Didier z Rivii [ life 4 sound ]
maviozo --> mysle ze do zastosowania jakie chce zrobic Grzesiek wystarczy taki sam sposob pisania skryptu do tego pluginu :) ale to juz jego decyzja :)
Grzesiek [ www eRepublik com PL ]
Ale to też jest myśl, żeby zainstalować Greasemonkey i w JS to napisać.
Pytanie teraz - jak najlepiej podpiąć bazę danych, tak by ją wykorzystać w skrypcie?
Plik xml?
Plik txt?
@Edit:
Didier - to do quizu z eRepublik :)
pecet007 [ - ]
grzesiek - json
maviozo [ Man with a movie camera ]
To ma pomagać rozwiązywać quizy czy co?:)
Podasz przykład takiego quizu?
[12] Rzuć linka do takiego przykładowego quizu?:)
Grzesiek [ www eRepublik com PL ]
Dokładnie tak :)
Mamy Quiz do rozwiązywania na eRepublik.
Wyświetla się pytanie i 4 możliwe odpowiedzi.
Mamy już bazę z pytaniami i prawidłowymi odpowiedziami.
Myślałem, żeby zaznaczyć część pytania i wtedy skrypt szuka pytania, które zaczyna się mniej więcej tym zaznaczeniem i wyrzuca/podświetla odpowiedź.
@pecet
Dzięki !!!
Grzesiek [ www eRepublik com PL ]
Quiz wizualnie wygląda tak:
Natomiast kod:
<html xmlns="
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<link rel="stylesheet" type="text/css" href="/css/global.css">
<link rel="stylesheet" type="text/css" href="/css/trivia.css">
<script type="text/javascript" charset="utf-8" src="/js/jquery-1.2.6.min.js"></script>
<script type="text/javascript" charset="utf-8" src="/js/jquery.countdown/jquery.countdown.min.js"></script>
<script type="text/javascript" src="/js/prototype.js"></script>
</head><body>
<!-- begin: ob -->
<div id="trivia" class="trivia-start" style="width: 640px; height: 480px; display: none;">
<div class="goright"><a href="/en/do_work?_tresh=2df46884cb09d378f18d4b74d1ffe2db&_rfh=c6ba63d2c52d1c8eaa4284bf220e7e5a" onclick="this.style.display = 'none';" class="btn-skip btn-skip_gray" title="skip">Skip</a></div>
<div style="padding-top: 190px; width: 100%; float: left;"><a href="#" class="btn-trivia-start" title="">Start</a></div>
</div>
<div id="trivia" class="trivia-questions" style="overflow: hidden; width: 640px; height: 480px;">
<div class="holder"><div class="goright"><a href="/en/do_work?_tresh=2df46884cb09d378f18d4b74d1ffe2db&_rfh=c6ba63d2c52d1c8eaa4284bf220e7e5a" onclick="this.style.display = 'none';" class="btn-skip" title="skip">Skip</a></div></div>
<div class="trivia-container" style="padding-left: 30px; padding-right: 0pt;"><div class="show-questions">
<ul class="questions largepadded">
<li id="0qmarker" class="on">1</li>
<li id="1qmarker">2</li>
<li id="2qmarker">3</li>
<li id="3qmarker">4</li>
<li id="4qmarker">5</li>
</ul>
<div id="trivia_countdown" class="question-bar-end largepadded hasCountdown"><div class="countdown_row countdown_show1"><div class="countdown_section"><span class="countdown_amount">14</span></div></div></div>
</div><div id="trivia_question_container" style="float: left; width: 100%;">
<p id="trivia_question" class="special largepadded">When the percentage change in quantity demanded is greater than the percentage change in price, the demand for the good is _.</p>
<ul class="answer-blocks">
<li><a id="0trivia_answer" href="#" title=""><span><span>perfectly inelastic</span></span></a></li>
<li><a id="1trivia_answer" href="#" title="" class="last"><span><span>inelastic</span></span></a></li>
<li><a id="2trivia_answer" href="#" title=""><span><span>elastic</span></span></a></li>
<li><a id="3trivia_answer" href="#" title="" class="last"><span><span>unit elastic</span></span></a></li>
</ul>
</div></div>
</div>
<!-- end: ob -->
<script type="text/javascript" charset="utf-8">
$j(document).ready(function()
with ($j("a.btn-trivia-start"))
html("Start");
click(function()
$j("div.trivia-start").hide();
$j("div.trivia-questions").show();
nextQuestion();
);
$j("ul.answer-blocks li a").click(function()
nextQuestion( parseInt($j(this).attr("id")) );
return false;
);
);
function nextQuestion(answer)
$j("div#trivia_question_container").hide();
$j("div#trivia_countdown").countdown('destroy');
if (typeof(answer) != "undefined")
trivia_answer_end_time = new Date();
trivia_answer_time_diff = trivia_answer_end_time - trivia_answer_start_time;
trivia_answer_time_diff = Math.floor(trivia_answer_time_diff / 1000);
if (trivia_answer_time_diff >= 0 && trivia_answer_time_diff <= 20)
if (trivia_session[trivia_index-1])
trivia_session[trivia_index-1]["answered_in"] = trivia_answer_time_diff;
trivia_session[trivia_index-1]["answer"] = answer;
if (trivia_session[trivia_index])
$j("p#trivia_question").html(trivia_session[trivia_index]["question"]);
$j.each(trivia_session[trivia_index]["answers"], function(idx, val)
$j("a#"+idx+"trivia_answer").html("<span><span>"+val+"</span></span>");
);
if (trivia_index > 0 && trivia_index < 5)
$j("li#"+(trivia_index-1)+"qmarker").attr("class", "off");
$j("li#"+trivia_index+"qmarker").attr("class", "on");
trivia_index++;
$j("div#trivia_question_container").fadeIn("fast");
$j("div#trivia_question_container").queue(function()
var answer_time = new Date();
trivia_answer_start_time = new Date();
answer_time.setSeconds(answer_time.getSeconds() + 20);
$j("div#trivia_countdown").countdown('destroy');
$j("div#trivia_countdown").countdown(until: answer_time, format: "S", onExpiry: nextQuestion);
$j(this).dequeue();
);
else
var answer_form = '<form id="results_form" method="post" action="/en/trivia-results"><input type="hidden" id="_token" name="_token" value="da6d1dd1fb91d436363a37f1e70177a5" />' +
'<input type="hidden" name="ts" value="722561f64c917c8b8c3510c1d9709f78" />' +
'<input type="hidden" name="tt" value="work" />' +
'<input type="hidden" name="pbu" value="JTJGZW4lMkZkb193b3Jr" />' +
'<input type="hidden" name="rfh" value="c6ba63d2c52d1c8eaa4284bf220e7e5a" />';
jQuery.each(trivia_session, function(idx, val)
if (trivia_session[idx])
answer_form += '<input type="hidden" name="answers['+idx+']" value="'+(typeof(trivia_session[idx]["answer"]) != "undefined" ? trivia_session[idx]["answer"]:"")+'" />';
answer_form += '<input type="hidden" name="answers_in['+idx+']" value="'+(typeof(trivia_session[idx]["answered_in"]) != "undefined" ? trivia_session[idx]["answered_in"]:"")+'" />';
);
answer_form += '</form>';
$j("div#trivia_question_container").append(answer_form);
$j("form#results_form").submit();
var trivia_index = 0;
var trivia_answer_start_time = NaN;
var trivia_answer_end_time = NaN;
var trivia_session = ([
"question": "When the percentage change in quantity demanded is greater than the percentage change in price, the demand for the good is _.",
"answers": [
"perfectly inelastic",
"inelastic",
"elastic",
"unit elastic" ]
,
"question": "What American philosopher wrote “A Theory of Justice”?",
"answers": [
"David Hume",
"John Dewey",
"John Rawls",
"William James" ]
,
"question": "A copyright creates a monopoly by restricting _.",
"answers": [
"demand for the product",
"entry into the market",
"the number of creators and inventors",
"the prices that can be charged" ]
,
"question": "Who was the longest serving ruler of Italy out of these four?",
"answers": [
"Benito Mussolini",
"Ivanoe Bonomi",
"Francesco Nitti",
"Giovanni Giolitti" ]
,
"question": "Who in the 1800's said, 'Democracy means simply the bludgeoning of the people by the people for the people.'?",
"answers": [
"Cecil Rhodes",
"Vladimir Lenin",
"Oscar Wilde",
"Henry James" ]
,
]);
</script>
</body></html>
Grzesiek [ www eRepublik com PL ]
Czy metodą evaluate:
document.evaluate
mogę wydobyć te pytania, które są zawarte w skrypcie JS kodu strony?
maviozo [ Man with a movie camera ]
Faktycznie zajrzyj do tego skryptu napisanego przez peceta - tam jest właśnie document.evaluate wykorzystane. I do dziś mi nie odpowiedziałeś na jakim sprzęcie pracujesz, tzn jakiej kamerze:)
Grzesiek [ www eRepublik com PL ]
Ah faktycznie zapomniałem :)
Aż wstyd mówić - Panas NV-GS70.
Ty pewnie masz bardziej profesjonalny sprzęt :) Też dalej nie wiem jaki :P
Edit:
No doszedłem na razie do tego:
var x = document.evaluate("/html/body/form/div[@id='trivia']/script", document, null, XPathResult.UNORDERED_NODE_ITERATOR_TYPE, null);
I nie wiem jak dobrać się do zmiennej
trivia_session
Grzesiek [ www eRepublik com PL ]
Okej, muszę się dostać do tego:
<p id="trivia_question" class="special largepadded">When the percentage change in quantity demanded is greater than the percentage change in price, the demand for the good is _.</p>
Czy to jest okej?
var x = document.evaluate("/html/body/form/p[@id='trivia_question']", document, null, XPathResult.UNORDERED_NODE_ITERATOR_TYPE, null);
Edit:
Muszę trochę poczytać o tym XPath :P
Edit 2:
XPather pomoga :)
maviozo [ Man with a movie camera ]
Napisałem Ci dawno, że Sony FX1:)
Myślę, że dobieranie się do <p ..> nic Ci nie da, bo JS zmieni zawartość tego pytania i pola odpowiedzi dynamicznie, a kod pozostanie taki sam..chociaż nieco gubię się w tym kodzie..mimo to uważam, że byłoby głupie podać wszystkie pięć pytań w kodzie, skoro "next" miałby generować się i tak od nowa.
Dlatego ja rzuciłbym wszelkie światło podejrzeń na
"question": "When(...)"
"answers: [
(...)
],
Grzesiek [ www eRepublik com PL ]
Do pytania z id="trivia_question" dostałem się bez problemu, ale wolałbym dostać się do tej zmiennej w skrypcie strony.
Da radę?
Edit:
Ale zapomniałem jaki tytuł miał wątek, gdzie się o to pytałem :P
Dobrze myślisz - dobieranie z <p> nic nie daje :(
Grzesiek [ www eRepublik com PL ]
No dobra.
Niech mi ktoś powie tylko, czy mogę się dostać do tej zmiennej trivia_session z poziomu swojego kodu JS.
Zaznaczam, że zmienna ta jest w kodzie JS strony.
maviozo [ Man with a movie camera ]
Gdybyś pytał jak zrobić to w php to odpowiedź miałbyś od razu:)
musisz poszukać funkcji porównującej tekst do wzoru. Ja na logikę wziąłbym to tak.
Utworzył tablicę pytania
za pomocą funkcji wyszukał fragmenty strony od "question": do ]
następnie w każdej z tablic oddzielił wszystkie zaczynące się od " i na " kończące, dałoby Ci to pięć wyników - pierwsze to pytanie, pozostałe odpowiedzi.
Efekt byłby tablica[3][3]="Ivanoe Bonomi"
Grzesiek [ www eRepublik com PL ]
Okej, zmienną dostaję w postaci łańcucha dzięki:
var x = document.evaluate("/html/body/script", document, null, XPathResult.ANY_TYPE, null);
var thisHeading = x.iterateNext();
var alertText = "";
while (thisHeading)
alertText = thisHeading.textContent
alertText = alertText.slice(alertText.indexOf("var trivia_session = (["));
thisHeading = x.iterateNext();
alert(alertText);
Teraz pozostaje to, co mówisz - do tablicy pytania, a odpowiedzi odrzucić :)
maviozo [ Man with a movie camera ]
ahaaa, Tobie tylko na pytaniach zależało:)
Grzesiek [ www eRepublik com PL ]
Si :)
Rzuciłbyś mi wyrażeniem regularnym, które zebrałoby mi tekst między
"question": "TEN TEKST",
"answers":
Czyli ("question": ")Pytanko(","answers":)?
Piwo postawię przy okazji :)
Grzesiek [ www eRepublik com PL ]
Mógłbym jeszcze raz prosić o pomoc?
Da radę to jakoś odszyfrować?
<script type="text/javascript">document.write("<fpevcg glcr=\"grkg/wninfpevcg\" punefrg=\"hgs-8\" fep=\"/wf/wdhrel.pbhagqbja/wdhrel.pbhagqbja.zva.wf\"></fpevcg>".replace(/[a-zA-Z]/g, function(c)return String.fromCharCode((c<="Z"?90:122)>=(c=c.charCodeAt(0)+13)?c:c-26);))</script>
maviozo [ Man with a movie camera ]
Osz ty w mordę, komuś się chciało utrudnić..
Zobaczę czy coś się uda wymyślić.
Mógłbyś wkleić to na dpaste.com?
Grzesiek [ www eRepublik com PL ]
Siur :)
Chciałbym tylko wiedzieć, czy jest sposób, by jakoś to odszyfrować?
Z tego co widzę, to zaszyfrowali ścieżkę do skryptu JS z funkcją prepare_form.
Takie głupie pytanie chyba - czy to jest litera za literę szyfr?
maviozo [ Man with a movie camera ]
Chcesz poznać prawdziwe wartości?
To bardzo proste:)
zamieniasz
document.write("
na
zmienna="
i usuwasz ostatni okrągły nawias z końca linijki.
Efekt-------->
A potem przepisać.
To za komentarzem // to oryginalna linijka.
I to wcale nie jest funkcją prepare_form, tylko właśnie tymi dwoma które pogrubiłeś w poście [25].
Grzesiek [ www eRepublik com PL ]
Jesteś wielki maviozo :)
To już drugi browar masz u mnie :)