Scanner: Jooble entfernt
Quelle, Schlüsselfeld in Einstellungen -> Scanner und Doku raus. Agenten, die jooble noch gespeichert haben, bekommen es nicht mehr angezeigt; die Pipeline überspringt unbekannte Quellen ohnehin. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 5.5
parent
a85daf01da
commit
e0f6ef06cd
@@ -281,7 +281,7 @@ export const ScannerAgents: React.FC = () => {
|
||||
</div>
|
||||
{sources.some((item) => !item.ready) && (
|
||||
<p className="mt-2 text-xs text-ink-400">
|
||||
Adzuna und Jooble brauchen einen kostenlosen API-Schlüssel
|
||||
Adzuna braucht einen kostenlosen API-Schlüssel
|
||||
{isAdmin ? (
|
||||
<>
|
||||
{' '}
|
||||
@@ -300,7 +300,7 @@ export const ScannerAgents: React.FC = () => {
|
||||
) : (
|
||||
' (Administrator: Einstellungen → Scanner)'
|
||||
)}
|
||||
. Ohne Schlüssel werden sie übersprungen.
|
||||
. Ohne Schlüssel wird es übersprungen.
|
||||
</p>
|
||||
)}
|
||||
</div>
|
||||
|
||||
@@ -8,11 +8,10 @@ export const SOURCE_LABELS: Record<ScannerSourceId, string> = {
|
||||
stepstone: 'StepStone',
|
||||
karriere: 'karriere.at',
|
||||
adzuna: 'Adzuna',
|
||||
jooble: 'Jooble',
|
||||
freelancermap: 'freelancermap',
|
||||
};
|
||||
|
||||
export const SOURCE_ORDER: ScannerSourceId[] = ['ba', 'stepstone', 'karriere', 'adzuna', 'jooble', 'freelancermap'];
|
||||
export const SOURCE_ORDER: ScannerSourceId[] = ['ba', 'stepstone', 'karriere', 'adzuna', 'freelancermap'];
|
||||
|
||||
export const STATUS_LABELS: Record<ScannerMatchStatus, string> = {
|
||||
neu: 'Neu',
|
||||
|
||||
@@ -8,7 +8,7 @@ import { WEEKDAY_LABELS } from '../scanner/scannerUi';
|
||||
* Reiter "Scanner" in den Einstellungen (nur Administratoren).
|
||||
*
|
||||
* Wann und wie oft der Scanner selbst sucht, wie alt Anzeigen höchstens sein
|
||||
* dürfen, und die kostenlosen API-Schlüssel für Adzuna und Jooble. Die
|
||||
* dürfen, und der kostenlose API-Schlüssel für Adzuna. Die
|
||||
* Schlüssel kommen - wie der OpenAI-Schlüssel - nie zurück zum Browser.
|
||||
*/
|
||||
|
||||
@@ -18,7 +18,7 @@ export const ScannerSettings: React.FC = () => {
|
||||
const { toast } = useToast();
|
||||
const [schedule, setSchedule] = useState<ScannerSchedule | null>(null);
|
||||
const [secrets, setSecrets] = useState<ScannerSecrets | null>(null);
|
||||
const [keys, setKeys] = useState({ adzunaId: '', adzunaKey: '', joobleKey: '' });
|
||||
const [keys, setKeys] = useState({ adzunaId: '', adzunaKey: '' });
|
||||
const [busy, setBusy] = useState(false);
|
||||
|
||||
useEffect(() => {
|
||||
@@ -37,7 +37,7 @@ export const ScannerSettings: React.FC = () => {
|
||||
const data = await scannerApi.saveSettings(changes);
|
||||
setSchedule(data.settings);
|
||||
setSecrets(data.secrets);
|
||||
setKeys({ adzunaId: '', adzunaKey: '', joobleKey: '' });
|
||||
setKeys({ adzunaId: '', adzunaKey: '' });
|
||||
toast('Gespeichert.', 'success');
|
||||
} catch (err) {
|
||||
toast(err instanceof Error ? err.message : 'Speichern fehlgeschlagen.', 'error');
|
||||
@@ -134,11 +134,11 @@ export const ScannerSettings: React.FC = () => {
|
||||
<h2 className="text-base font-semibold text-ink-900">API-Schlüssel</h2>
|
||||
<p className="mt-1 max-w-3xl text-sm text-ink-500">
|
||||
Agentur für Arbeit, StepStone, karriere.at und freelancermap brauchen nichts. Adzuna (einzige Quelle für
|
||||
die Schweiz) und Jooble geben nach kostenloser Registrierung einen Schlüssel aus. Ohne Schlüssel werden
|
||||
sie übersprungen.
|
||||
die Schweiz) gibt nach kostenloser Registrierung einen Schlüssel aus. Ohne Schlüssel wird es
|
||||
übersprungen.
|
||||
</p>
|
||||
|
||||
<div className="mt-4 grid gap-4 lg:grid-cols-3">
|
||||
<div className="mt-4 grid gap-4 lg:grid-cols-2">
|
||||
<KeyField
|
||||
label="Adzuna App ID"
|
||||
current={secrets.adzunaId}
|
||||
@@ -152,13 +152,6 @@ export const ScannerSettings: React.FC = () => {
|
||||
value={keys.adzunaKey}
|
||||
onChange={(adzunaKey) => setKeys({ ...keys, adzunaKey })}
|
||||
/>
|
||||
<KeyField
|
||||
label="Jooble API-Key"
|
||||
current={secrets.joobleKey}
|
||||
value={keys.joobleKey}
|
||||
onChange={(joobleKey) => setKeys({ ...keys, joobleKey })}
|
||||
hint="jooble.org/api/about → Schlüssel anfordern"
|
||||
/>
|
||||
</div>
|
||||
|
||||
<PrimaryButton
|
||||
|
||||
+2
-3
@@ -435,7 +435,7 @@ export const dashboardApi = {
|
||||
|
||||
/* ---------------------------------------------------------------- Scanner */
|
||||
|
||||
export type ScannerSourceId = 'ba' | 'stepstone' | 'karriere' | 'adzuna' | 'jooble' | 'freelancermap';
|
||||
export type ScannerSourceId = 'ba' | 'stepstone' | 'karriere' | 'adzuna' | 'freelancermap';
|
||||
export type ScannerMatchStatus = 'neu' | 'gesehen' | 'in_bearbeitung' | 'verworfen';
|
||||
|
||||
export interface ScannerAgent {
|
||||
@@ -465,7 +465,7 @@ export interface ScannerSource {
|
||||
label: string;
|
||||
countries: string;
|
||||
ready: boolean;
|
||||
needsKey: 'adzuna' | 'jooble' | null;
|
||||
needsKey: 'adzuna' | null;
|
||||
last: { ok: boolean; count: number; errors: string[] } | null;
|
||||
}
|
||||
|
||||
@@ -512,7 +512,6 @@ export interface ScannerMatch {
|
||||
export interface ScannerSecrets {
|
||||
adzunaId: string | null;
|
||||
adzunaKey: string | null;
|
||||
joobleKey: string | null;
|
||||
}
|
||||
|
||||
export type ScannerAgentInput = Pick<ScannerAgent, 'name' | 'keywords' | 'sources' | 'excludes' | 'is_active'>;
|
||||
|
||||
Reference in New Issue
Block a user